容器数据卷
出现的意义:
-
数据持久化,因为容器删除后,保存在容器中的数据会丢失
-
方便容器与宿主机数据交互
docker数据类型:
-
数据卷 :相当于mount一块磁盘
-
数据容器:将数据保存在容器上,用于容器间共享数据,这种容器一般不跑应用,只是挂载卷
数据卷
挂载分类
-
具名挂载
-
-v 卷名:容器路径
-
[root@master ~]
-
f7640ae90c7ec4a2514bc0bf4fb41c156c21d9e5b3ab43aabcba7ed279a9b3df
-
[root@master ~]
-
DRIVER VOLUME NAME
-
local 7a767141bcb3e25b07c67aaad61ffacab081d1b80937fc7b02c3184cd4706b0b
-
local 7727d1a368eec5721da70bf1af6121065b646a7be02d97b007e9c8b508148029
-
local test_volume
-
[root@master ~]
-
"Mountpoint": "/var/lib/docker/volumes/test_volume/_data",
-
匿名挂载
没有指定宿主机目录的,一般默认宿主机路径为/var/lib/docker/volumes/卷名/_data
-
-v 容器路径
-
[root@master ~]
-
c986f508b492e8327a0916c54f824f2f46490f50674fd0ef6c2303d369a304ad
-
指定宿主机路径挂载
-
-v 宿主机路径:容器路径
扩展
-v 宿主机路径:容器路径:ro
测试一:挂载centos镜像
[root@master ~]
[root@master centos_tmp]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c475662fa21b centos:latest "/bin/bash" 4 minutes ago Up 4 minutes silly_hamilton
[root@master centos_tmp]
"Mounts": [
{
"Type": "bind",
"Source": "/root/yiyu/centos_tmp",
"Destination": "/tmp",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
[root@master centos_tmp]
分别在容器外创建文件、容器内创建文件验证:
停止容器,检查文件是否存在:
测试二:搭建mysql卷环境
[root@master centos_tmp]
[root@master ~]
c738c38ffdf5b5d731cedec603215886b74ad83...03a0bf6cb2249986c5d9
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c738c38ffdf5 mysql:5.7 "docker-entrypoint.s…" 37 seconds ago Up 36 seconds 3306/tcp, 33060/tcp mysql_docker
[root@master ~]
"Mounts": [
{
"Type": "bind",
"Source": "/root/yiyu/mysql/conf",
"Destination": "/etc/mysql/conf",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/root/yiyu/mysql/libs",
"Destination": "/var/lib/mysql",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "c738c38ffdf5",
"Domainname": "",
[root@master ~]
total 4
drwxr-xr-x. 2 root root 6 Nov 22 22:08 conf
drwxr-xr-x. 5 polkitd root 4096 Nov 22 22:10 libs
[root@master ~]
total 0
[root@master ~]
total 188484
-rw-r-----. 1 polkitd input 56 Nov 22 22:08 auto.cnf
-rw-------. 1 polkitd input 1676 Nov 22 22:08 ca-key.pem
-rw-r--r--. 1 polkitd input 1112 Nov 22 22:08 ca.pem
-rw-r--r--. 1 polkitd input 1112 Nov 22 22:08 client-cert.pem
-rw-------. 1 polkitd input 1676 Nov 22 22:08 client-key.pem
...
[root@master centos_tmp]
root@c738c38ffdf5:/
root@c738c38ffdf5:/
total 188484
-rw-r-----. 1 mysql mysql 56 Nov 22 14:08 auto.cnf
-rw-------. 1 mysql mysql 1676 Nov 22 14:08 ca-key.pem
-rw-r--r--. 1 mysql mysql 1112 Nov 22 14:08 ca.pem
-rw-r--r--. 1 mysql mysql 1112 Nov 22 14:08 client-cert.pem
-rw-------. 1 mysql mysql 1676 Nov 22 14:08 client-key.pem
...
root@c738c38ffdf5:/
root@c738c38ffdf5:/
[root@master centos_tmp]
total 4
-rw-r--r--. 1 root root 8 Nov 22 22:18 test_sh_yiyu.sh
[root@master centos_tmp]
c738c38ffdf5
[root@master centos_tmp]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@master centos_tmp]
total 4
drwxr-xr-x. 2 root root 29 Nov 22 22:18 conf
drwxr-xr-x. 5 polkitd root 4096 Nov 22 22:10 libs
[root@master centos_tmp]
total 4
-rw-r--r--. 1 root root 8 Nov 22 22:18 test_sh_yiyu.sh
[root@master centos_tmp]
total 188484
-rw-r-----. 1 polkitd input 56 Nov 22 22:08 auto.cnf
-rw-------. 1 polkitd input 1676 Nov 22 22:08 ca-key.pem
-rw-r--r--. 1 polkitd input 1112 Nov 22 22:08 ca.pem
-rw-r--r--. 1 polkitd input 1112 Nov 22 22:08 client-cert.pem
-rw-------. 1 polkitd input 1676 Nov 22 22:08 client-key.pem
...
测试三:通过dockerFile挂载数据卷
[root@master docker_file]
[root@master docker_file]
[root@master docker_file]
> FROM centos:latest
> VOLUME ["volume1","volume2","volume3"]
> CMD echo "ok"
> CMD /bin/bash
> EOF
FROM centos:latest
VOLUME ["volume1","volume2","volume3"]
CMD echo "ok"
CMD /bin/bash
[root@master docker_file]
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos:latest
---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume1","volume2","volume3"]
---> Using cache
---> e1c7151792b2
Step 3/4 : CMD echo "ok"
---> Using cache
---> 313c3d61e1f6
Step 4/4 : CMD /bin/bash
---> Using cache
---> a4d1fa934530
Successfully built a4d1fa934530
Successfully tagged yiyu/centos:1.0
[root@master docker_file]
REPOSITORY TAG IMAGE ID CREATED SIZE
yiyu/centos 1.0 a4d1fa934530 About a minute ago 231MB
tomcat_local 1.0 c0855d5befbd 26 hours ago 685MB
tomcat 9.0 76206e3ba4b1 4 days ago 680MB
[root@master docker_file]
[root@3fdfae345dcc /]
drwxr-xr-x. 2 root root 6 Nov 23 14:21 volume1
drwxr-xr-x. 2 root root 6 Nov 23 14:21 volume2
drwxr-xr-x. 2 root root 6 Nov 23 14:21 volume3
[root@3fdfae345dcc /]
[root@3fdfae345dcc /]
exit
[root@master docker_file]
"Type": "volume",
"Name": "fafa186d6965db85cec19eba9473e19f1b713569ed15f89873130eeb75d86a4a",
"Source": "/var/lib/docker/volumes/fafa186d6965db85cec19eba9473e19f1b713569ed15f89873130eeb75d86a4a/_data",
"Destination": "volume1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
[root@master docker_file]
total 0
-rw-r--r--. 1 root root 0 Nov 23 22:22 test_by
数据容器
--volumes-from
[root@master ~]
[root@5a186457299a /]
drwxr-xr-x. 2 root root 6 Nov 24 11:58 volume1
drwxr-xr-x. 2 root root 6 Nov 24 11:58 volume2
drwxr-xr-x. 2 root root 6 Nov 24 11:58 volume3
[root@master ~]
[root@800867154ec9 /]
drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume1
drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume2
drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume3
[root@master ~]
[root@d6c45a5f7461 /]
drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume1
drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume2
drwxr-xr-x. 2 root root 6 Nov 24 12:00 volume3
[root@master ~]
docker01
[root@master ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6c45a5f7461 yiyu/centos:1.0 "/bin/bash" 5 minutes ago Up 5 minutes docker03
800867154ec9 yiyu/centos:1.0 "/bin/bash" 6 minutes ago Up 6 minutes docker02
[root@master ~]
volume管理
docker volume create 卷名
docker rm -v 容器id
docker volume rm 卷名
docker volume ls
docker volume ls -qf dangling=true
docker volume inspect 卷名
docker inspect 卷名
docker volume rm $(docker volume ls -qf dangling=true)
DockerFile
构建步骤
编写dockerfile
-
docker build
-
docker run
-
dockers push
基础语法
-
每个指令(关键字)必须大写
-
从上到下,顺序执行
-
注释用
-
每一个指令都创建一个镜像层并提交
常用命令
FROM
MAINTAINER
ADD
COPY
RUN
CMD
ENTRYPOINT
ONBUILD
ENV
WORKDIR
EXPOSE
VOLUME
CMD和ENTRYPOINT的区别:
-
编写两个dockersfile
[root@master docker_file]
FROM centos
MAINTAINER yiyu
CMD ["ls","-a"]
[root@master docker_file]
FROM centos
MAINTAINER yiyu
ENTRYPOINT ["ls","-a"]
[root@master docker_file]
2. 分别编译生成镜像
[root@master docker_file]
[root@master docker_file]
[root@master docker_file]
3. 查看镜像列表
[root@master docker_file]
centos_entrypoint 0.1 5fa9ded07c07 6 seconds ago 231MB
centos_cmd 0.1 e615afa00c74 10 seconds ago 231MB
mycentos 1.0 3e8d28433743 2 days ago 371MB
yiyu/centos 1.0 a4d1fa934530 3 days ago 231MB
centos latest 5d0da3dc9764 2 months ago 231MB
-
运行容器,在docker run后添加-a对比
[root@master docker_file]
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0001] error waiting for container: context canceled
[root@master docker_file]
total 0
drwxr-xr-x. 1 root root 6 Nov 27 07:16 .
drwxr-xr-x. 1 root root 6 Nov 27 07:16 ..
-rwxr-xr-x. 1 root root 0 Nov 27 07:16 .dockerenv
lrwxrwxrwx. 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x. 5 root root 360 Nov 27 07:16 dev
drwxr-xr-x. 1 root root 66 Nov 27 07:16 etc
drwxr-xr-x. 2 root root 6 Nov 3 2020 home
...
-
结论:从上可以看出,启动时添加的-a,会把CMD中的参数全部替换掉,转而把你输入的参数当成命令去执行,而会在ENTRYPOINT的参数后面是添加。即-l和ls -a -l的区别。
实例1:制作centos镜像
[root@master ~]
yiyu/centos 1.0 a4d1fa934530 23 hours ago 231MB
centos latest 5d0da3dc9764 2 months ago 231MB
1.编写dockerfile
[root@master docker_file]
MAINTAINER yiyu
ENV default_path="/usr/local/bin"
WORKDIR $default_path
RUN yum install -y perf
RUN yum install -y net-tools
EXPOSE 8080
CMD echo "$default_path"
CMD /bin/bash
-
构建dockerfile,看到最后的两个successfully就说明构建成功了
[root@master docker_file]
Sending build context to Docker daemon 3.072kB
Step 1/9 : FROM yiyu/centos:1.0
...
Successfully built 3e8d28433743
Successfully tagged mycentos:1.0
[root@master docker_file]
mycentos 1.0 3e8d28433743 46 seconds ago 371MB
yiyu/centos 1.0 a4d1fa934530 23 hours ago 231MB
centos latest 5d0da3dc9764 2 months ago 231MB
-
分别启动 yiyu/centos:1.0 和 mycentos:1.0 对比,发现前者无perf和ifconfig命令,后者有
[root@master docker_file]
[root@aaf5b20b026f /]
bash: perf: command not found
[root@aaf5b20b026f /]
bash: ifconfig: command not found
[root@aaf5b20b026f /]
[root@master docker_file]
[root@49812951c620 bin]
usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]
...
[root@49812951c620 bin]
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 8 bytes 656 (656.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
实例2:制作可动态发布的tomcat镜像
1. 准备一个tomcat包和jdk包
[root@master tomcat_pack]
total 195380
-rw-r--r--. 1 root root 10305939 Nov 27 15:27 apache-tomcat-8.5.50.tar.gz
-rw-r--r--. 1 root root 189756259 Nov 27 15:44 jdk-8u161-linux-x64.tar.gz
-rw-r--r--. 1 root root 0 Nov 27 15:47 readMe.md
[root@master tomcat_pack]
2. 编写dockerfile
[root@master tomcat_pack]
FROM centos
MAINTAINER yiyu
ADD ./jdk-8u161-linux-x64.tar.gz /usr/local/
ADD ./apache-tomcat-8.5.50.tar.gz /usr/local/
COPY ./readMe.md /usr/local/
RUN yum -y install which net-tools
ENV MY_PATH="/usr/local"
ENV WORKDIR=$MY_PATH
ENV JAVA_HOME="/usr/local/jdk1.8.0_161"
ENV CLASSPTH="$JAVA_HOME/lib"
ENV CATALINA_HOME="/usr/local/apache-tomcat-8.5.50"
ENV CATALINA_BASH="/usr/local/apache-tomcat-8.5.50"
ENV PATH="$PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin"
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.50/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.50/logs/catalina.out
-
构建dockerfile
[root@master tomcat_pack]
Sending build context to Docker daemon 200.1MB
Step 1/15 : FROM centos
---> 5d0da3dc9764
Step 2/15 : MAINTAINER yiyu
...
---> a9138168a7bb
Successfully built a9138168a7bb
Successfully tagged mytomcat:0.1
[root@master tomcat_pack]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 0.1 a9138168a7bb 3 minutes ago 669MB
centos_entrypoint 0.1 5fa9ded07c07 About an hour ago 231MB
centos_cmd 0.1 e615afa00c74 About an hour ago 231MB
-
启动容器
[root@master tomcat_pack]
51b6911b1f683cc7ccb07e8639702fd8fd01b328df9414ab13d463ac5b173275
-
访问验证
[root@master tomcat_pack]
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Sat, 27 Nov 2021 08:52:42 GMT
-
发布新内容
"Mounts": [
{
"Type": "bind",
"Source": "/root/tomcat_pack/tomcat_8.5.50/logs",
"Destination": "/usr/local/apache-tomcat-8.5.50/logs",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
{
"Type": "bind",
"Source": "/root/tomcat_pack/tomcat_8.5.50/test",
"Destination": "/usr/local/apache-tomcat-8.5.50/webapps/test",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
[root@master test]
<h3>hello java</h3>
[root@master test]
验证访问
[root@master test]
<h3>hello java</h3>
[root@master test]
发布镜像到docker hub
[root@master tomcat_8.5.50]
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 0.1 a9138168a7bb 19 minutes ago 669MB
centos_entrypoint 0.1 5fa9ded07c07 2 hours ago 231MB
[root@master tomcat_8.5.50]
[root@master tomcat_8.5.50]
REPOSITORY TAG IMAGE ID CREATED SIZE
yiyu5527/mytomcat8.5.50 0.1 a9138168a7bb 24 minutes ago 669MB
mytomcat 0.1 a9138168a7bb 24 minutes ago 669MB
[root@master tomcat_8.5.50]
The push refers to repository [docker.io/yiyu5527/mytomcat8.5.50]
a5db832a5077: Pushed
ec1302ae29f9: Pushed
c10265c2b734: Pushed
03c12ebc4a35: Pushed
74ddd0ec08fa: Mounted from library/centos
0.1: digest: sha256:87acca3eb6329ac9721e820ae891502...f8fea38dda512dd90d2cb0810af size: 1373
上传成功
扩展:
docker history 镜像id
docker login [仓库地址]
docker logout
docker save
docker tag 镜像id
docker push
《Docker基础(二)》来自互联网公开内容,收录仅供学习使用,如侵权请联系删除。本文URL:https://www.ezixuan.com/1021475.html