Docker之旅-Docker镜像制作

制作自己的Docker镜像

制作自己的Docker镜像有两种方式

  1. 将容器变成镜像
  2. 通过Buildfile语法制作镜像

将容器变成镜像

首先我们先从docker镜像仓库拉取一个tomcat镜像,切换到root账号

1
2
3
4
5
6
7
8
9
# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementa... 1419 [OK]
tomee Apache TomEE is an all-Apache Java EE cert... 38 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba... 37 [OK]
davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 wi... 19 [OK]
consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 16 [OK]
cloudesire/tomcat Tomcat server, 6/7/8 15 [OK]
....

这里会列出镜像仓库 中一堆的tomcat相关的镜像资源,下面我们拉取一个到本地。

1
2
3
4
5
# docker pull dordoka/tomcat
//等待一段时间拉取完成
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dordoka/tomcat latest 7d9888a99efb 7 months ago 780 MB

启动容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# docker run -it -p 8080:8080 dordoka/tomcat
//查看所有容器
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9a987406fc9e dordoka/tomcat "/opt/tomcat/bin/c..." 2 minutes ago Up About a minute 8009/tcp, 0.0.0.0:8080->8080/tcp flamboyant_darwin
// 下面我们进入容器,做一些修改
# docker exec -it 9a987406fc9e /bin/bash
root@9a987406fc9e:/opt/tomcat# cd webapps
root@9a987406fc9e:/opt/tomcat/webapps# ls
host-manager manager
// 接下来在webapps目录下创建一个ROOT目录,并在里面新建一个index.html页面
root@9a987406fc9e:/opt/tomcat/webapps# mkdir ROOT
root@9a987406fc9e:/opt/tomcat/webapps# cd ROOT/
root@9a987406fc9e:/opt/tomcat/webapps/ROOT# touch index.html
// 在Html页面写些内容,比如 Hello World!
root@9a987406fc9e:/opt/tomcat/webapps/ROOT# vi index.html
// 编辑完退出 container
root@9a987406fc9e:/opt/tomcat/webapps/ROOT# exit
exit

在宿主机上通过浏览器访问 http://localhost:8080 就能看到我们对于容器的修改。
docker 容器的修改.png

将我们修改好的容器制作成镜像

通过docker commit [repo:tag] 将容器制作成镜像

1
2
3
4
5
6
7
# docker commit 9a987406fc9e marspie/tomcat:1.0
sha256:8887c9ac97bc3f3fc5767bf714f058035f4f89cd24162a57844140d755a505a1
//查看本地镜像,可以看到我们制作好的marspie/tomcat 1.0版
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
marspie/tomcat 1.0 8887c9ac97bc 49 seconds ago 780 MB
dordoka/tomcat latest 7d9888a99efb 7 months ago 780 MB

将容器制作成镜像的做法:

优点缺点
最方便,最快速不规范,无法自动化

Buildfile 制作镜像

下面我们通过Buildfile文件来制作一个jdk1.8-tomcat8的镜像。

  1. 首先我们从Oracle官网下载: jdk-8u144-linux-x64.tar.gz
  2. 下载Tomcat8 Apache官网下载:apache-tomcat-8.5.16.tar.gz
  3. Buildfile 文件内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    # VERSION 0.0.1
    # ubuntu server
    FROM ubuntu
    # 签名
    MAINTAINER MARSPIE "marspie@126.com"

    # 把java与tomcat添加到容器中
    ADD jdk-8u144-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-8.5.16.tar.gz /usr/local/

    # 配置java与tomcat环境变量
    ENV JAVA_HOME /usr/local/jdk1.8.0_144
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    ENV TOMCAT_HOME /usr/local/apache-tomcat-8.5.16
    ENV PATH $PATH:$JAVA_HOME/bin:$TOMCAT_HOME/lib:$TOMCAT_HOME/bin

    # 容器运行时监听的端口
    EXPOSE 8080

    ENTRYPOINT ["/usr/local/apache-tomcat-8.5.16/bin/catalina.sh", "run"]
    #CMD /usr/local/apache-tomcat-8.5.16/bin/catalina.sh run
    ```
    4. 将如上准备的3个文件至于同一目录下
    ``` bash
    [root@bogon docker]# ls -l
    total 190372
    -rwxrw-rw-. 1 alex alex 9417469 Jul 30 18:28 apache-tomcat-8.5.16.tar.gz
    -rw-------. 1 alex alex 654 Jul 30 19:09 Dockerfile
    -rwxrw-rw-. 1 alex alex 185515842 Jul 30 18:34 jdk-8u144-linux-x64.tar.gz
  4. 使用如下命令制作镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    [root@bogon docker]# docker build -t marspie/ubuntu-tomcat8:0.0.2 .
    Sending build context to Docker daemon 194.9 MB
    Step 1/10 : FROM ubuntu
    ---> 14f60031763d
    Step 2/10 : MAINTAINER MARSPIE "marspie@126.com"
    ---> Using cache
    ---> 9e2681f280b5
    Step 3/10 : ADD jdk-8u144-linux-x64.tar.gz /usr/local/
    ---> Using cache
    ---> e69764710ed4
    Step 4/10 : ADD apache-tomcat-8.5.16.tar.gz /usr/local/
    ---> Using cache
    ---> 9cef7a3e804b
    Step 5/10 : ENV JAVA_HOME /usr/local/jdk1.8.0_144
    ---> Using cache
    ---> 54b3e6339868
    Step 6/10 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ---> Using cache
    ---> 463ccbe97778
    Step 7/10 : ENV TOMCAT_HOME /usr/local/apache-tomcat-8.5.16
    ---> Using cache
    ---> 9455c2777e34
    Step 8/10 : ENV PATH $PATH:$JAVA_HOME/bin:$TOMCAT_HOME/lib:$TOMCAT_HOME/bin
    ---> Using cache
    ---> 5fc99c79cfe5
    Step 9/10 : EXPOSE 8080
    ---> Using cache
    ---> 63aa2690221f
    Step 10/10 : ENTRYPOINT /usr/local/apache-tomcat-8.5.16/bin/catalina.sh run
    ---> Running in ef7da9894470
    ---> 55eebdf6b21d
    Removing intermediate container ef7da9894470
    Successfully built 55eebdf6b21d
  5. 运行下我们制作的tomcat镜像

    1
    # docker run -it -p 8080:8080 55eebdf6b21d
  6. 测试,通过宿主机浏览器访问:http://localhost:8080 看到tomcat的欢迎页面,好了通过Dockerfile制作镜像成功了。

Docker 镜像的导入导出

将镜像导出为文件

1
# docker save -o marspie-ubuntu-tomcat8.0.02.tar marspie/ubuntu-tomcat8:0.0.2

完成后通过 ls 命令即可看到文件
docker_images_save.png

将我们打包导出的镜像包上传至另一台虚机
docker_images_up.png
镜像导入

1
# docker load -i marspie-ubuntu-tomcat8.0.02.tar

docker_images_load.png
这样我们又可以在这台虚机愉快的玩耍了O(∩_∩)O~

Alex.Yao wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!