添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

制作Docker镜像,有以下两种方法。

  • 快照方式制作镜像 (偶尔制作的镜像):在基础镜像上,比如Ubuntu,先登录镜像系统并安装Docker软件,然后整体制作快照,即可得到所需软件的Docker镜像。
  • Dockerfile方式制作镜像 (经常更新的镜像):将软件安装的流程写成DockerFile,使用Docker build构建成Docker镜像。
  • 建议设置Docker镜像开机启动,防止出现“docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”报错。

    设置Docker开机启动命令: systemctl enable docker

    启动Docker命令: systemctl start docker

    例如,在Linux操作系统下,可以使用如下命令快速安装容器引擎。

    curl -fsSL get.docker.com -o get-docker.sh
    sh get-docker.sh
  • 启动一个空白的基础容器,并进入容器。

    例如,启动一个CentOS容器。

    docker run -it centos
  • 安装依赖包。
    yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
    yum -y install git
    yum -y install gcc automake autoconf libtool make
    yum install -y zlib zlib-devel
  • 安装bwa软件,在github上下载bwa的源代码,并使用make编译。
    yum install bwa
    git clone https://github.com/lh3/bwa.git
    cd bwa;make

    请预先安装好Git,并检查本机是否有ssh key设置。

  • 输入 exit 退出容器。
  • 查询容器id。
    docker ps -a
  • 制作快照。
    docker commit -m "xx" -a "tsj" container-id tsj/image:tag

    例如:docker commit -m "test" -a "username" adb1127979a1 bwa:v0.7

  • -a:提交的镜像作者,例如tsj。
  • container-id:容器id。
  • -m:提交时的说明文字,例如xx。
  • tsj/image:tag:仓库名/镜像名:TAG名,名称可自定义。
  • 执行 docker images 查看制作完成的Docker镜像。
  • Dockerfile方式制作镜像

    如果后续镜像经常变更(例如某个软件更新版本),建议使用Dockerfile方式制作镜像。如果采用快照方式制作镜像,则每次变更都需要执行操作命令,制作过程较为繁琐。

    Dockerfile方式制作镜像是将快照制作的方式用Dockerfile文件写出来,然后执行 docker build -t tsj/image:tag . 命令,自动完成镜像制作。

    命令中“.”表示DockerFile文件的路径,“tsj/image:tag”表示仓库名/镜像名:TAG名。

    Dockerfile方式制作镜像常用命令示例:

    本例中使用华为云 弹性云服务器服务(ECS) 创建一台云服务器,制作centos镜像,并在镜像中放入图片文件。

  • 购买弹性云服务器
  • 云服务器创建成功后,在 云服务器列表 页,选中待登录的弹性云服务器。单击“远程登录”,输入ECS初始账号,登录ECS。 图2 云服务器列表
  • 安装容器引擎。

    例如,在Linux操作系统下,可以使用如下命令快速安装容器引擎。

    curl -fsSL get.docker.com -o get-docker.sh
    sh get-docker.sh
  • 创建一个名为workdir的目录。
    mkdir workdir
  • 在该目录中创建一个Dockerfile文件。
    cd ./workdir
    touch Dockerfile
  • 在该目录中创建一个空白文件abc.txt,创建一个webapp目录。
    touch abc.txt
    mkdir webapp
  • 在该目录中下载一个网络图片。
    wget https://www.baidu.com/img/bd_logo1.png
  • 执行 vi Dockerfile 命令,进入Dockerfile文件中,编写文件。
    #Version 1.0.1
    FROM centos:latest
    MAINTAINER ***u "***[email protected]"
    #设置root用户为后续命令的执行者
    USER root
    #执行操作
    RUN yum update -y
    RUN yum install -y java
    #使用&&拼接命令
    RUN touch test.txt && echo "abc" >>abc.txt
    #对外暴露端口
    EXPOSE 80 8080 1038
    #复制文件
    COPY abc.txt /opt/
    #复制文件夹
    COPY /webapp /opt/webapp
    #复制图片文件
    COPY bd_logo1.png /opt/
    #设置环境变量
    ENV WEBAPP_PORT=9090
    #设置工作目录
    WORKDIR /opt/
    #设置启动命令
    ENTRYPOINT ["ls"]
    #设置启动参数
    CMD ["-a", "-l"]
    VOLUME ["/data", "/var/www"]
    #设置子镜像的触发操作,该命令在创建镜像时不会执行,只有在后续依照该镜像创建新镜像时才会执行
    ONBUILD ADD . /app/src
    ONBUILD RUN echo "on build excuted" >> onbuild.txt
  • 按Esc键,并执行 :wq 退出Dockerfile。
  • 制作镜像。
    docker build -t centos:v01 .
  • 详细的Dockerfile指令请参见 Dockerfile参考 《容器镜像服务 编写高效的Dockerfile》