Docker(二)

一、docker镜像制作

构建镜像的方式有两种:

  • 使用docker commit命令
  • 使用docker build和dockerfile文件

1.1 docker commit

1.1.1 制作步骤

# docker commit:提交一个正在运行的容器为一个新的镜像

#本例:制作一个tomcat镜像,制作步骤:
# 1. 拉取一个基础镜像
docker pull

#2. 创建一个交互式的容器

二、Docker file

2.1 DockerFile介绍

dockerfile 是用来构建docker镜像的文件,命令参数脚本

构建步骤:

  1. 编写一个dockerfile文件

  2. docker build构建成为一个镜像

  3. docker run运行镜像

  4. docker push 发布镜像(DockerHub开源)

很多官方镜像都是基础包,需要自行搭建。

2.2 Docker构建过程

基础知识:

  1. 每个保留关键字(指令都是必须大写字母)
  2. 执行从上到下顺序执行
  3. #表示注释
  4. 每一个指令都会创建一个新的镜像层,并提交
img

步骤:开发、部署、上线运维

DockerFile :构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行产品

Docker容器:容器就是镜像运行起来,提供服务

2.3 DockerFile的指令

FROM             #基础镜像,一切从这里开始构建
MIANTAINER       #镜像是谁写的,姓名+邮箱
RUN              #镜像构建的时候需要运行的命令
ADD              #步骤(例如,需要添加tomcat镜像,就需要ADD tomcat压缩包)
WORKDIR          #镜像的工作目录
VOLUME           #挂载的目录
EXPOSE           #保留端口配置
CMD              #指定这个容器启动的时候需要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT       #指定这个容器启动的时候需要运行的命令,可以追加命令
ONBUILD          #当构建一个被继承的DockerFile的时候运行,触发指令
COPY             #类似ADD,将我们的文件拷贝到镜像中
ENV              #构建的时候设置环境变量
img

2.4 实战测试

Docker Hub中大多数的镜像都是FROM scratch(基础镜像),然后添加需要的软件和相关配置

官方centos-7.0镜像地址

创建自己的centos

当使用Dockerfile Build镜像时,有时会发现发送到Daemon的内容过大,发现Docker Client会默认发送Dockerfile同级目录下的所有文件到Dockerdaemon中

解决办法有两种:

1.创建.dockerignore文件,把不需要的文件写到里面,该文件包含的目录不会被发送到Docker daemon中

2.就找个空目录只有dockerfile。

#1. 编写DockerFile文件
root@huif-Ubuntu20:/home# vim mydockerfile_centos
root@huif-Ubuntu20:/home# cat mydockerfile_centos
FROM centos
MAINTAINER huif<909582348@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
CMD echo $MYPATH
CMD echo "----end---"
CMD /bin/bash

# 2、通过文件构建镜像
#命令 docker build -f dockerfile文件路径 -t 镜像名:[tag]
docker build -f mydockerfile_centos -t mycentos:0.1 .
Successfully built 18d1a913eb39
Successfully tagged mycentos:0.1

# 3、测试运行
root@huif-Ubuntu20:/home# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mycentos     0.1       18d1a913eb39   2 minutes ago   307MB
centos       latest    300e315adb2f   8 months ago    209MB
root@huif-Ubuntu20:/home# docker run -it mycentos:0.1
[root@16337acecbda local]# pwd
/usr/local
[root@16337acecbda local]# vim test
[root@16337acecbda local]# 

docker history 查询历史

我们可以列出镜像本地进行的变更历史

root@huif-Ubuntu20:/home# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
mycentos     0.1       18d1a913eb39   23 minutes ago   307MB
centos       latest    300e315adb2f   8 months ago     209MB
root@huif-Ubuntu20:/home# docker history  18d1a913eb39
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
18d1a913eb39   23 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B        
92fc11f9359e   23 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
55b731328368   23 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B        
c64fcd1cbe79   23 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B        
b09f2a766b7d   23 minutes ago   /bin/sh -c yum -y install net-tools             29.5MB    
660b69269c0f   23 minutes ago   /bin/sh -c yum -y install vim                   68.1MB    
b69cbbf442b3   24 minutes ago   /bin/sh -c #(nop) WORKDIR /usr/local            0B        
43ea30a12280   24 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/usr/local        0B        
0e7e837a39e0   24 minutes ago   /bin/sh -c #(nop)  MAINTAINER huif<909582348…   0B        
300e315adb2f   8 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      8 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      8 months ago     /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB 

2.5 CMD和ENTRYPOINT的区别

CMD              #指定这个容器启动的时候需要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT       #指定这个容器启动的时候需要运行的命令,可以追加命令

测试cmd

#1. 创建dockerfile
root@huif-Ubuntu20:/home/docker_test# vim docker_cmd
#2.打印dockerfile内容
root@huif-Ubuntu20:/home/docker_test# cat docker_cmd
FROM centos
CMD ["ls","-a"]
#3.根据文件创建镜像
root@huif-Ubuntu20:/home/docker_test# docker build -f docker_cmd -t cmdImages .
invalid argument "cmdImages" for "-t, --tag" flag: invalid reference format: repository name must be lowercase
See 'docker build --help'.
root@huif-Ubuntu20:/home/docker_test# docker build -f docker_cmd -t cmdtest .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM centos
 ---> 300e315adb2f
Step 2/2 : CMD ["ls","-a"]
 ---> Using cache
 ---> 8ea1c1e3331e
Successfully built 8ea1c1e3331e
Successfully tagged cmdtest:latest
#4. run运行 发现命令"ls","-a"生效
root@huif-Ubuntu20:/home/docker_test# docker run 8ea1c1e3331e
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
root@huif-Ubuntu20:/home/docker_test# 

三、容器的目录挂载

#1. 在/opt创建交互式的镜像,并映射到/usr/local/myhtml
root@huif-Ubuntu20:/opt# docker run -itd --name c2 -v /opt:/usr/local/myhtml centos /bin/bash
43eb617c41eb2a1239e9993d1924bd3db0764ea0918b1bd7636c40c431f4a0f3
root@huif-Ubuntu20:/opt# ls
containerd  deepinwine  google
#2. 运行容器
huif@huif-Ubuntu20:~$ docker exec -it /c2 /bin/bash
#3. 查看宿主机映射目录/usr/local/myhtml下的文件目录
[root@43eb617c41eb /]# cd /usr/local/myhtml
[root@43eb617c41eb myhtml]# ls
containerd  deepinwine	google
#4. 在/opt编写一个1.txt的文件
root@huif-Ubuntu20:/opt# vim 1.txt
root@huif-Ubuntu20:/opt# cat 1.txt
Hi! huif
#5. 在/usr/local/myhtml查看映射
[root@43eb617c41eb myhtml]# ls
1.txt  containerd  deepinwine  google
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值