docker 操作日志
# 环境检查 系统内核
uname -r
# 系统版本
cat /etc/os-release
# 1、卸载docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2、需要的安装包
yum install -y yum-utils
# 3、设置镜像仓库 默认是国外的
#国外的
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#阿里云镜像仓库地址
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4、更新yum索引 保持环境一致 yum makecache fast centos8 不需要带fast参数
yum makecache
# 5、安装docker引擎 docker-ce 社区版 docker-ce-cli containerd.io
yum install docker-ce docker-ce-cli containerd.io
报错如下
#Error:
Problem: package docker-ce-3:19.03.13-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.13-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.13-3.2.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.2-3.3.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.2-3.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.4-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.5-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.6-3.3.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.3.7-3.1.el7.x86_64 is filtered out by modular filtering
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
解决方案
centos8默认使用podman代替docker,所以需要containerd.io,那我们就安装一下就好了
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
继续安装 docker-ce
yum install docker-ce
# 6、启动docker
systemctl start docker
docker version #查看是否安装成功
# 7、 测试helloworld 程序
docker run hello-world
# 8、 查看hello-world 镜像
#卸载docker
#卸载Docker Engine,CLI和Containerd软件包:
yum remove docker-ce docker-ce-cli containerd.io
#主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷:
rm -rf /var/lib/docker
# 9、配置阿里云加速器 这个配置在阿里云服务器 容器镜像服务>镜像加速器>centos里面直接复制就好了
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://d8ll6dh6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
阿里云设置的地址 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
docker命令
docker run
docker run --help 查看命令
docker run [options] image [command] [arg...]
docker run -i -t --name mytest centos:latest /bin/bash
# -d 后台方式运行
# -i 标识使用交互模式,诗中保持输入流开放
# -t 标识分配一个伪终端,两个参数结合使用 -it 即可以在容器中利用打开的伪终端进行交互操作
# --name 指定启动容器的名字 不指定会随机分配一个名字
# -c 用于给运行在容器中的所有进程分配cpu的shares值(权重)
# -m 用于限制为容器中所有进程分配的内存总量(单位 B K M G)
# -V 挂载volumn 可以用多个 -v 参数 同时挂载多个volumn ,volumn格式为[host-dir]:[container-dir]:[rw|ro]
# -p 用于将容器的端口暴露给宿主机的端口,格式为 hostPort:container-port
# -P 随机指定端口 (大写P)
docker pull
拉取镜像 Pull an image or a repository from a registry
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# docker pull centos 获取centos:latest 镜像
# docker pull centos:centos 12.22.1 拉取指定版本的镜像
docker push
推送镜像 Push an image or a repository to a registry
docker push [OPTIONS] NAME[:TAG]
docker images
列出主机上的镜像 默认只列出最顶层的镜像,-a可以列出所有镜像
docker images [options] [repository[:tag]]
docker rmi
docker rmi 删除镜像 如果已有基于该镜像启动的容器存在,则无法删除 可以-f 强制删除
docker rm +id 删除容器 可以同时删除多个容器
docker version 当前docker的版本信息
docker info 显示docker的系统信息包括容器的信息
docker 命令 --help 查询命令信息
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker pull mysql
Using default tag: latest # 如果不带tags 默认下载最新版
latest: Pulling from library/mysql
d121f8d1c412: Pull complete # 分层下载
f3cebc0b4691: Pull complete
1862755a0b37: Pull complete
489b44f3dbb4: Pull complete
690874f836db: Pull complete
baa8be383ffb: Pull complete
55356608b4ac: Pull complete
dd35ceccb6eb: Pull complete
429b35712b19: Pull complete
162d8291095c: Pull complete
5e500ef7181b: Pull complete
af7528e958b6: Pull complete
Digest: sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
d121f8d1c412: Already exists #之前下载的层不会重新下载
f3cebc0b4691: Already exists
1862755a0b37: Already exists
489b44f3dbb4: Already exists
690874f836db: Already exists
baa8be383ffb: Already exists
55356608b4ac: Already exists
277d8f888368: Pull complete
21f2da6feb67: Pull complete
2c98f818bcb9: Pull complete
031b0a770162: Pull complete
Digest: sha256:14fd47ec8724954b63d1a236d2299b8da25c9bbb8eacc739bb88038d82da4919
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@iZ2zedscyfod03wjkvxrk2Z ~]#
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 ef08065b0a30 12 days ago 448MB
mysql latest e1d7dc9731da 12 days ago 544MB
hello-world latest bf756fb1ae65 8 months ago 13.3kB
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker rmi -f e1d7dc9731da 删除指定的image
docker pull centos #下载centos
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker run -it centos /bin/bash #以交互进入容器,启动并进入centos容器
[root@be7dd20e4011 /]# exit #容器停止, 退出容器 ctrl+p+Q 容器不停止退出容器
docker save
把镜像保存成一个压缩包
docker save [OPTIONS] IMAGE [IMAGE...]
Options:
-o, --output string Write to a file, instead of STDOUT
[root@hcss-ecs-fe15 xiaoqu]# docker save -o nginx01.tar nginx:latest
[root@hcss-ecs-fe15 xiaoqu]# ls
nginx01.tar nginx-1.15.0 nginx-1.15.0.tar.gz
docker load
把镜像的压缩包加载成镜像
docker load [OPTIONS]
Options:
-i, --input string Read from tar archive file, instead of STDIN
-q, --quiet Suppress the load output
[root@hcss-ecs-fe15 xiaoqu]# docker load -i nginx01.tar
2edcec3590a4: Loading layer [==================================================>] 83.86MB/83.86MB
e379e8aedd4d: Loading layer [==================================================>] 62MB/62MB
b8d6e692a25e: Loading layer [==================================================>] 3.072kB/3.072kB
f1db227348d0: Loading layer [==================================================>] 4.096kB/4.096kB
32ce5f6a5106: Loading layer [==================================================>] 3.584kB/3.584kB
d874fd2bc83b: Loading layer [==================================================>] 7.168kB/7.168kB
Loaded image: nginx:latest
docker ps
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps # 列出正在运行的容器
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps -a #列出当前正在运行的容器+历史运行过的容器
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps -n=1 # 显示最近创建的容器 n=1 一个 n=2 两个
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps -aq #正在运行的容器+历史运行过的容器的编号
docker rm
docker rm +id #移除镜像 不能移除正在运行的镜像
docker rm +id #移除镜像 强制删除运行的容器
docker rm -f $(docker ps -aq) # 表达式删除所有容器
启动和停止容器
docker start 容器id
docker restart 容器id ()
docker stop 容器id
docker kill 容器id
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker run -it centos /bin/bash #运行
[root@5c65f59c8f1a /]# exit #退出
exit
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps #查看正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps -a # 查看正在运行和历史运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5c65f59c8f1a centos "/bin/bash" 17 seconds ago Exited (0) 11 seconds ago jovial_rhodes
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker start 5c65f59c8f1a #启动历史运行过的容器
5c65f59c8f1a
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps #查看正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5c65f59c8f1a centos "/bin/bash" 41 seconds ago Up 8 seconds jovial_rhodes
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker stop 5c65f59c8f1a #停止
5c65f59c8f1a
[root@iZ2zedscyfod03wjkvxrk2Z /]#
后台启动容器
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker run -d centos #后台运行centos
f0daa3444a43ecf9de1d20bc6edcd4eeb7e70dbc99275eabf76a92af8032b6dd
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps # 查看发现centos停止了,原因是docker容器使用后台运行,必须要有一个前台进程,docker发现没有应用就自动停止了 常见的坑 nginx容器启动后,发现自己没提供服务,就会立刻停止
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZ2zedscyfod03wjkvxrk2Z /]#
查看日志命令
docker logs --help
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker logs -f -t --tail 10 367da1071009 # 显示指定行数的日志 --tail 10 指定函数 367da1071009 容器id -f -t 日志详细信息
查看容器中进程信息
docker top 容器id
docker inspect 容器id
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker inspect 4b41be4059af
[
{
"Id": "4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631",
"Created": "2020-09-22T15:39:17.875462598Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 18956,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-09-22T15:39:18.400399969Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
"ResolvConfPath": "/var/lib/docker/containers/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631/hostname",
"HostsPath": "/var/lib/docker/containers/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631/hosts",
"LogPath": "/var/lib/docker/containers/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631/4b41be4059af36f128f4eb123e65bc7904bd52987dabaa6e8c1d7c6427847631-json.log",
"Name": "/unruffled_bose",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/d03afda0dabf674b02c2996c1dfccf01d3e7017103495ef112cf4e3adcde3539-init/diff:/var/lib/docker/overlay2/ab9f55624201d767449eced5785bca433e2095842461e7d37e3f11ba39cca864/diff",
"MergedDir": "/var/lib/docker/overlay2/d03afda0dabf674b02c2996c1dfccf01d3e7017103495ef112cf4e3adcde3539/merged",
"UpperDir": "/var/lib/docker/overlay2/d03afda0dabf674b02c2996c1dfccf01d3e7017103495ef112cf4e3adcde3539/diff",
"WorkDir": "/var/lib/docker/overlay2/d03afda0dabf674b02c2996c1dfccf01d3e7017103495ef112cf4e3adcde3539/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "4b41be4059af",
"Domainname": "",
"User": "",
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"Tty": true,
"OpenStdin": true,
"StdinOnce": true,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200809",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "1b06863617871d6aa74e77adde20171108662f29e51206c4dbc707e06a704640",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/1b0686361787",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "b6f6b02f2b343f01420d07054ec6d45ba5908a66460b9ce1a8d23e4b785a0583",
"Gateway": "172.18.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.18.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:12:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "794ee5813f2eb27980b3d6f9e0c2815a42b1bb761ab20ed13fa28193ca317043",
"EndpointID": "b6f6b02f2b343f01420d07054ec6d45ba5908a66460b9ce1a8d23e4b785a0583",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:02",
"DriverOpts": null
}
}
}
}
]
进去当前正在运行的容器
#我们通常
docker exec -it 4b41be4059af /bin/bash #进入容器开启一个新的终端
docker attach 4b41be4059af #进入容器打开正在执行的终端,不会开启一个新的进程
从容器内文件拷贝到主机上
docker cp 容器id:容器内路径 目的地主机路径
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b41be4059af centos "/bin/bash" 10 minutes ago Up 10 minutes unruffled_bose
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker exec -it 4b41be4059af /bin/bash 进入容器
[root@4b41be4059af /]# cd home
[root@4b41be4059af home]# ls
[root@4b41be4059af home]# touch aa.java #在文件内新建一个文件
docker cp 4b41be4059af:home/aa.java /home #这个拷贝和容器是否运行毫无关系,只要文件在就可以拷贝
#拷贝是手动过程,可以后面可以通过卷挂载技术实现自动同步
安装nginx
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker pull nginx
#从dockerhub拉取镜像
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker run -d --name nginx01 -p 3344:80 nginx
# -d 后台运行 --name 别名 -p 暴露端口 宿主机端口:容器内端口
安装tomcat
#启动tomcat
[root@iZ2zedscyfod03wjkvxrk2Z bin]# docker run -it --name tomcat02 -p 3344:8080 tomcat:9.0
#默认的tomcat webapps里面没有东西访问会报404 藏在webapps.dist里面
#进入运行的容器
[root@iZ2zedscyfod03wjkvxrk2Z bin]# docker exec -it tomcat01 /bin/bash
#复制webapps.dist里面的内容至webapps
root@a33f7621f5e7:/usr/local/tomcat# cp -r webapps.dist/* webapps
cp 命令
cp [options] source dest 或 cp [options] source... directory
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
docker 镜像
union联合文件系统
docker commit
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker commit -a="xiaoqu" -m="add test" e814d2ecd013 tomcatdemo:1.0
sha256:f04c7ee220fbca8c9e10654a772aa350e2fbd0ed3cfd13e9cf3856ae4b460794
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker iamges
docker: 'iamges' is not a docker command.
See 'docker --help'
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcatdemo 1.0 f04c7ee220fb 12 seconds ago 652MB
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e814d2ecd013 tomcat:9.0 "catalina.sh run" 3 days ago Up 3 days 0.0.0.0:3344->8080/tcp tomcat01
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker stop tomcat01 //停止之前的tomcat
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker run -it -p 8080:8080 tomcatdemo:1.0 //启动好自己制作好的tomcat镜像
#ctrl+p+q 直接退出当前的镜像 ,该镜像后台运行
#tomcat 启动后 修改自己需要的配置,利用commit 提交当前自己制作好的tomcat,获得自己一个新的镜像,就好比以前学习虚拟机时候的快照,以后可以直接用自己设置好的镜像
数据卷挂载
[root@iZ2zedscyfod03wjkvxrk2Z home]# docker run -it --name centosdemo -v /home/test:/home centos /bin/bash //主机的/home/test 与容器的/home 绑定
[root@ffb7a1cfce4f /]# cd home
[root@ffb7a1cfce4f home]# ls
[root@ffb7a1cfce4f home]# touch aa.txt // 在容器里面创建aa.text文件
[root@ffb7a1cfce4f home]# ls
aa.txt
[root@iZ2zedscyfod03wjkvxrk2Z ~]# docker inspect centosdemo // 需要在主机里面看,不能再容器里面看 查看启动的centos ,发现绑定成功
"Mounts": [
{
"Type": "bind",
"Source": "/home/test",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
[root@iZ2zedscyfod03wjkvxrk2Z test]# cd /home/test //查看主机里面的/home/test 里面存在了aa.text
[root@iZ2zedscyfod03wjkvxrk2Z test]# ls
aa.txt
#启动mysql
-d 后台运行 -p 暴露端口 -v 数据卷挂载 -e 环境配置 (这是是配置mysql密码) --name 容器名字
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -p 3310:3306 -v /home/docker/mysql/conf:/etc/mysql/conf.d -v /home/docker/mysql/date:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 --name mysqldemo mysql:5.7
a8c513412cd31dc3f9d74070870e92098094cba4a15c4d78cfaee56873f752c7
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8c513412cd3 mysql:5.7 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 33060/tcp, 0.0.0.0:3310->3306/tcp mysqldemo
[root@iZ2zedscyfod03wjkvxrk2Z test]#
具名挂载个匿名挂载
-P 不指定端口 随机分配端口 (P为大写 。小写为指定端口)
#匿名挂载
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -P --name nginx01 -v /home/docker/nginx nginx
dec50170e0e7cc577c3dac389209b27fe6d70038a874995ba2a565fc2fb8b34c
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker volume ls //查看所有卷的情况
DRIVER VOLUME NAME
local 6ca5a3062ff547c4af2b61f13e58b136dc8c5593a0b336f5cc79ef052e315475 //匿名卷
#具名挂载
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -P --name nginx02 -v juming:/etc/nginx nginx
63a78371086f01540a2e9aa0816f6f055e5b5c7cebd796b2415da9bce6e6296f
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker volume ls
DRIVER VOLUME NAME
local 6ca5a3062ff547c4af2b61f13e58b136dc8c5593a0b336f5cc79ef052e315475
local juming
[root@iZ2zedscyfod03wjkvxrk2Z test]# cd /var/lib/docker
[root@iZ2zedscyfod03wjkvxrk2Z docker]# ls
builder buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
[root@iZ2zedscyfod03wjkvxrk2Z docker]# cd volumes/
[root@iZ2zedscyfod03wjkvxrk2Z volumes]# ls
56e638111a2d0ccf66fd8c68eb07ed1a6309ccba8b59ce1379b3d7edd5059f14 eba178b7c1634f4246f5a2b0dfa30bd6490c258eaa2961c8156a4b04b829b01c metadata.db
6ca5a3062ff547c4af2b61f13e58b136dc8c5593a0b336f5cc79ef052e315475 juming
[root@iZ2zedscyfod03wjkvxrk2Z volumes]# cd juming
[root@iZ2zedscyfod03wjkvxrk2Z juming]# ls
_data
[root@iZ2zedscyfod03wjkvxrk2Z juming]# cd _data/
[root@iZ2zedscyfod03wjkvxrk2Z _data]# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
具名挂载、匿名挂载、指定路径挂载
ro readonly 只读 这个只能荣国宿主机来操作,容器内部是无法操作的
rw read write 可读可写
一旦这个设置了容器权限,容器对我们挂载出来的内容就有权限了
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -P --name nginx02 -v juming:/etc/nginx:ro nginx
[root@iZ2zedscyfod03wjkvxrk2Z test]# docker run -d -P --name nginx02 -v juming:/etc/nginx:rw nginx
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载 注意前面没/
-v /宿主机路径:容器内路径 #指定路径挂载 注意前面有/
dockerFile
通过dockerFile构建centos镜像
dockerFile 就是用来构建镜像的构建文件,其实就是一个脚本,通过这个脚本可以生成一个镜像
dockerFile 命令都是大写开口
# 1.通过dockerFile构建centos镜像
[root@iZ2zedscyfod03wjkvxrk2Z juming]# cd /home/docker
[root@iZ2zedscyfod03wjkvxrk2Z docker]# mkdir volume_test
[root@iZ2zedscyfod03wjkvxrk2Z docker]# cd volume_test/
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# vim dockerFile1
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# cat dockerFile1
FROM centos # 以centos为基础
VOLUME ["volume01","volume02"] #卷挂载
CMD echo "-----------end--------" #控制台输出日志
CMD /bin/bash
#-t 目标 最后由一个点,很重要 很重要 很重要
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker build -f dockerFile1 -t xiaoqu/centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 0d120b6ccaa8
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in ff042ab12db0
Removing intermediate container ff042ab12db0
---> 6066076b7806
Step 3/4 : CMD echo "-----------end--------"
---> Running in 25d08fdfa901
Removing intermediate container 25d08fdfa901
---> 6020e32be8ff
Step 4/4 : CMD /bin/bash
---> Running in 9be099ebeb47
Removing intermediate container 9be099ebeb47
---> bd8bf39e8ea2
Successfully built bd8bf39e8ea2
Successfully tagged xiaoqu/centos:1.0
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker volume ls
DRIVER VOLUME NAME
local 6ca5a3062ff547c4af2b61f13e58b136dc8c5593a0b336f5cc79ef052e315475
local 56e638111a2d0ccf66fd8c68eb07ed1a6309ccba8b59ce1379b3d7edd5059f14
local eba178b7c1634f4246f5a2b0dfa30bd6490c258eaa2961c8156a4b04b829b01c
local juming
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xiaoqu/centos 1.0 bd8bf39e8ea2 37 seconds ago 215MB
tomcatdemo 1.0 f04c7ee220fb 2 hours ago 652MB
tomcat 9.0 f796d3d2c195 11 days ago 647MB
nginx latest 7e4d58f0e5f3 2 weeks ago 133MB
mysql 5.7 ef08065b0a30 2 weeks ago 448MB
centos latest 0d120b6ccaa8 6 weeks ago 215MB
#启动自己制作的centos 发现自己volume01 volume02 生成镜像的时候自动挂载了,也就是数据卷目录
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xiaoqu/centos 1.0 bd8bf39e8ea2 7 minutes ago 215MB
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker run -it bd8bf39e8ea2 /bin/bash
[root@1d62e657042e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
启动自己制作的centos镜像
#如果启动的时候没有挂载卷,要手动挂载卷 启动的时候用-v挂载
[root@iZ2zedscyfod03wjkvxrk2Z volume_test]# docker run -it bd8bf39e8ea2 /bin/bash
[root@1d62e657042e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
[root@1d62e657042e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var volume01 volume02
[root@1d62e657042e /]# cd volume01
[root@1d62e657042e volume01]# touch aa.text 在 容器内的卷里面制作一个文件aa.text
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1d62e657042e bd8bf39e8ea2 "/bin/bash" 6 minutes ago Up 6 minutes determined_darwin
#查看容器内卷挂载情况 卷挂载只写了容器内的名字,属于匿名挂载 默认挂载在 /var/lib/docker/volumes/里面
[root@iZ2zedscyfod03wjkvxrk2Z /]# docker inspect 1d62e657042e
"Mounts": [
{
"Type": "volume",
"Name": "ccf5f1877eec56c45cb37b4e14c618db8731d384c6307ae552f2d5e3dbba1892",
"Source": "/var/lib/docker/volumes/ccf5f1877eec56c45cb37b4e14c618db8731d384c6307ae552f2d5e3dbba1892/_data",
"Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "ba01d48dc1c874b03dc179394e652d0223905a8636878c87f143e961ce862b75",
"Source": "/var/lib/docker/volumes/ba01d48dc1c874b03dc179394e652d0223905a8636878c87f143e961ce862b75/_data",
"Destination": "volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
–volumes-from centos01 容器共享 centos02 挂载在centos01里面 centos01 删除了 centos02里面不会删除