编程知识 cdmana.com

Docker学习笔记 06数据卷容器和Dockerfile

数据卷容器

使用Dockerfile创建镜像

docker build -f dockerfile1 -t test/centos:1.0 .

注意最后有一个.(表示生成在当前目录下)

vim dockerfile1

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "---end---"

CMD /bin/bash

查看挂载信息

docker run -it test/centos:1.0 /bin/bash

ls -l 

drwxr-xr-x  2 root root 4096 Aug  1 13:42 volume01
drwxr-xr-x  2 root root 4096 Aug  1 13:42 volume02

touch volume01/test1

#查看容器信息
docker inspect 容器ID

"Mounts": [
            {
                "Type": "volume",
                "Name": "f031e6bb7308ae91279cf1ba149aa04fb657bfdb612df79ad8e1e14d9ddd1b3a",
                "Source": "/var/lib/docker/volumes/f031e6bb7308ae91279cf1ba149aa04fb657bfdb612df79ad8e1e14d9ddd1b3a/_data",
                "Destination": "volume01",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "e34e2bae85f36f00364ec5c59a3fa85e92f946010a50099d97a92bd41c9d1c96",
                "Source": "/var/lib/docker/volumes/e34e2bae85f36f00364ec5c59a3fa85e92f946010a50099d97a92bd41c9d1c96/_data",
                "Destination": "volume02",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]

容器间数据共享

--volumes-from 数据卷容器
docker run -itd --name docker01 test/centos:1.0

docker run -itd --name docker02 --volumes-from docker01  test/centos:1.0
docker run -itd --name docker03 --volumes-from docker01  test/centos:1.0
#docker01就是数据卷容器
#docker01,02,03共享volume01,volume02目录

注:删除docker01后,02和03仍可以访问共享文件

多个Mysql实现数据共享

docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 --name mysql01 mysql:5.7

docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=密码 --name mysql02 --volumes-from mysql01 mysql:5.7

结论

容器间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

Dockerfile

介绍

用来构建docker镜像的文件

1.编写dockerfile文件
2.docker build 构建镜像
3.docker run 运行镜像
4.docker push 发布镜像

构建过程

基础知识:

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

基础指令

FROM         #基础镜像
MAINTAINER   #镜像维护者:姓名+邮箱
RUN          #镜像构建时需要运行的命令
ADD          #添加内容
WORKDIR      #工作目录
VOLUME       #挂载目录
EXPOSE       #指定暴露端口
CMD          #容器启动时运行(仅最后一个生效,可被替代)
ENTRYPOINT   #容器启动时运行,可追加命令
ONBUILD      #构建被继承的dockerfile时运行
COPY         #将文件拷贝到镜像中
ENV          #构建时设置环境变量

构建centos

1.编写文件

vim dockerfile-centos
FROM centos
MAINTAINER itxiaoma<xxx@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 "--- BUILD END ---"
CMD /bin/bash

2.执行构建命令

docker build dockerfile-centos -t mycentos:0.1 .

3.测试运行

docker run -it mycentos:0.1

vim test
ifconfig

docker history 镜像ID #查看镜像构建过程

CMD和ENTRYPOINT的区别

测试CMD

vim dockerfile-cmd

FROM centos
CMD ["ls","-a"]

docker build -f dockerfile-cmd -t cmdtest .

docker run cmdtest

docker run entrytest ls -al #不可追加命令

测试ENTRYPOINT

vim dockerfile-entry

FROM centos
ENTRYPOINT ["ls","-a"]

docker build -f dockerfile-entry -t entrytest .

docker run entrytest

docker run entrytest -l #可追加命令

追加命令是直接拼接在ENTRYPOINT命令后的

发布镜像

1.注册登录Docker Hub

docker login -u itxiaoma

Login Succeeded

2.提交镜像

docker tag entrytest itxiaoma/entrytest:1.0

docker push itxiaoma/entrytest:1.0

发布到阿里云镜像

1.在容器镜像服务创建命名空间,创建本地仓库
2.根据引导推送镜像

版权声明
本文为[IT小马]所创,转载请带上原文链接,感谢
https://segmentfault.com/a/1190000040457490

Tags docker
Scroll to Top