1 容器启动
创建容器命令:
docker run
参数:
-i : 表示运行容器,让容器的标准输入保持打开
-t : 表示容器启动后进入其命令行,加入-it后,容器创建后,即自动登录(分配一个伪终端)
--name : 创建的容器名称
-v : 可以挂在宿主机目录至容器目录,如-v /data:/tmp/data,左边为宿主机目录,右边为容器目录。
-d : 容器处于守护进程运行,创建后,不自动登录
-p : 可以映射宿主机端口至容器端口,如 -p 8080:8081(左边为宿主机端口,右边为容器端口),可使用多个 -p 做多个端口映射
容器属性:
CONTAINER ID: 容器 ID
IMAGE: 使用的镜像
COMMAND: 启动容器时运行的命令
CREATED: 容器的创建时间
STATUS: 容器状态
CREATED : 已创建
RESTARTING : 重启中
RUNNING : 运行中
REMOVING : 迁移中
PAUSED : 暂停
EXITED : 停止
DEAD : 死亡
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)
NAMES: 自动分配的容器名称
1.1 以交互的方式启动
# 启动容器 -it(以交互的方式) gp6-mysql-5.7(自定义服务名称) /bin/bash(通过该命令交互,打开命令行)
[root@localhost ~]# docker run -it --name gp6-mysql-5.7 mysql:5.7 /bin/bash
# 此时已进入容器(相当于虚拟一台服务器)
root@687ce880b698:/# ls -l
total 4
drwxr-xr-x. 1 root root 19 Dec 28 23:00 bin
drwxr-xr-x. 2 root root 6 Sep 8 10:51 boot
drwxr-xr-x. 5 root root 360 Jan 6 08:48 dev
drwxr-xr-x. 2 root root 6 Dec 28 22:59 docker-entrypoint-initdb.d
lrwxrwxrwx. 1 root root 34 Dec 28 23:00 entrypoint.sh -> usr/local/bin/docker-entrypoint.sh
drwxr-xr-x. 1 root root 66 Jan 6 08:48 etc
drwxr-xr-x. 2 root root 6 Sep 8 10:51 home
drwxr-xr-x. 1 root root 45 Dec 24 00:00 lib
drwxr-xr-x. 2 root root 34 Dec 24 00:00 lib64
drwxr-xr-x. 2 root root 6 Dec 24 00:00 media
drwxr-xr-x. 2 root root 6 Dec 24 00:00 mnt
drwxr-xr-x. 2 root root 6 Dec 24 00:00 opt
dr-xr-xr-x. 108 root root 0 Jan 6 08:48 proc
drwx------. 1 root root 24 Dec 28 22:59 root
drwxr-xr-x. 1 root root 21 Jan 6 08:48 run
drwxr-xr-x. 2 root root 4096 Dec 24 00:00 sbin
drwxr-xr-x. 2 root root 6 Dec 24 00:00 srv
dr-xr-xr-x. 13 root root 0 Jan 6 08:01 sys
drwxrwxrwt. 1 root root 6 Dec 28 23:00 tmp
drwxr-xr-x. 1 root root 19 Dec 24 00:00 usr
drwxr-xr-x. 1 root root 41 Dec 24 00:00 var
# 退出容器,容器既停止
root@74a45d30f16f:/# exit
exit
1.2 以守护方式启动
[root@localhost ~]# docker run -di --name gp6-mysql-5.7.2 mysql:5.7
f8699708c78c151cf7be8c36bdf3d706e0054975f9b9b62f79e5859e75c13209
# 第一种进入容器(建议使用)
[root@localhost ~]# docker exec -it gp6-mysql-5.7 /bin/bash
# Ctrl + q将容器切到后台
root@bcceae209dd0:/# read escape sequence
# exec会在容器中启动新的进程
[root@localhost ~]# docker top bcceae209dd0
UID PID PPID C STIME TTY TIME CMD
polkitd 1727 1711 0 14:38 ? 00:00:00 mysqld
root 2057 1711 0 14:50 pts/0 00:00:00 /bin/bash
# 此时退出,容器不会停止
root@74a45d30f16f:/# exit
exit
# 第二种进入容器(不建议使用,退出容器,容器即停止)
[root@localhost ~]# docker attach gp6-tomcat-8
# 未能看到期望输出的 Hello GP6 Docker ,输出的长字符串叫做容器 ID
[root@localhost ~]# docker run -d centos:7 /bin/echo "Hello GP6 Docker"
333aa30cc0fcd6745757752be5534287884b039a93fb47e98d29d652587cf4dc
# 宿主主使用 docker logs 命令,查看容器内的标准输出
[root@localhost ~]# docker logs 333aa30cc0fc
Hello GP6 Docker
# -t 查看日志的输出时间
[root@localhost ~]# docker logs -t 99930c323df0
2020-01-13T06:33:55.395216688Z Hello GP6 Docker
-t : 显示日志的输出时间
-f : 与linux查看日志的-f效果一直
--tail : --tail 10 只显示最新的10条日志
# 查看运行容器的进程信息
[root@localhost ~]# docker top bcceae209dd0
UID PID PPID C STIME TTY TIME CMD
polkitd 1727 1711 3 14:38 ? 00:00:00 mysqld
2 查询存在的容器
# 查看启动的容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
687ce880b698 mysql:5.7 "docker-entrypoint..." 5 minutes ago Up 2 seconds 3306/tcp, 33060/tcp gp6-mysql-5.7
# 查看所有的容器
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8699708c78c mysql:5.7 "docker-entrypoint..." 38 seconds ago Exited (1) 37 seconds ago gp6-mysql-5.7.2
74a45d30f16f mysql:5.7 "docker-entrypoint..." 3 minutes ago Exited (127) 2 minutes ago gp6-mysql-5.7
3 容器停止
# 容器停止
[root@localhost ~]# docker stop gp6-mysql-5.7
gp6-mysql-5.7
# 容器启动(当容器第一次启动时,被命名后,可用该命令启动)
[root@localhost ~]# docker start gp6-mysql-5.7
gp6-mysql-5.7
4 容器删除
# 容器删除(提示不能删除运行的容器)
[root@localhost ~]# docker rm gp6-mysql-5.7
Error response from daemon: You cannot remove a running container 74a45d30f16fee7f94e4499d9ba1a943f4893464d9e10d77651a367040cc0f3c. Stop the container before attempting removal or use -f
# 容器停止
[root@localhost ~]# docker stop gp6-mysql-5.7
gp6-mysql-5.7
# 容器删除
[root@localhost ~]# docker rm gp6-mysql-5.7
gp6-mysql-5.7
4 文件拷贝
# 将宿主机文件拷贝至容器中
[root@localhost ~]# docker cp anaconda-ks.cfg gp6-mysql-5.7:/usr/local
# 将容器中文件拷贝至宿主机中
[root@localhost ~]# docker cp gp6-mysql-5.7:/usr/local/anaconda-ks.cfg new.config
[root@localhost ~]# ll
总用量 8
-rw-------. 1 root root 1258 1月 6 15:54 anaconda-ks.cfg
-rw-------. 1 root root 1258 1月 6 15:54 new.config
5 目录挂载
# 将宿主机目录与容器目录进行映射,这样修改宿主机目录中的文件会同时修改容器内目录内的文件
[root@localhost ~]# docker run -di --name gp6-tomcat-8 -p 8080:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8-jdk8-openjdk
514a7ff658332451fe3a18893e9bc519649e7a64b599292eda8188863b95067f
如果共享的是多级目录,可能会出现权限不足问题,需添加参数--privileged=true解决
6 Docker命令
# 查看docker所有命令
[root@localhost ~]# docker
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
......
# 命令 docker command --help 了解详细的 Docker 命令使用方法
[root@localhost ~]# docker stats --help
Usage: docker stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
Options:
-a, --all Show all containers (default shows just running)
--format string Pretty-print images using a Go template
--no-stream Disable streaming stats and only pull the first result
--no-trunc Do not truncate output
7 查看容器ip
[root@localhost gp6]# docker inspect gp6-mysql-5.7
[
{
"Id": "687ce880b698aa7eb1cf53cf8949970a21e9fdce2248d3512f779570c3bdcc13",
"Created": "2020-01-06T08:48:21.366894132Z",
"Path": "docker-entrypoint.sh",
"Args": [
"/bin/bash"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 12364,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-01-06T11:19:03.839227432Z",
"FinishedAt": "2020-01-06T10:08:20.23618595Z"
},
"Image": "sha256:db39680b63ac47a1d989da7b742f7b382af34d85a68214f8977bad59c05901a6",
"ResolvConfPath": "/var/lib/docker/containers/687ce880b698aa7eb1cf53cf8949970a21e9fdce2248d3512f779570c3bdcc13/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/687ce880b698aa7eb1cf53cf8949970a21e9fdce2248d3512f779570c3bdcc13/hostname",
"HostsPath": "/var/lib/docker/containers/687ce880b698aa7eb1cf53cf8949970a21e9fdce2248d3512f779570c3bdcc13/hosts",
"LogPath": "",
"Name": "/gp6-mysql-5.7",
"RestartCount": 0,
"Driver": "overlay2",
"MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c871,c927",
"ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c871,c927",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "journald",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "docker-runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": -1,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"GraphDriver": {
"Name": "overlay2",
"Data": {
"LowerDir": "/var/lib/docker/overlay2/9abef40215aad31d1b0971413126462f3f5c8b5c9fac9574e0bd2f077ef596a9-init/diff:/var/lib/docker/overlay2/f0fd8cb367c19e5bc889ed630112322cc3b3151de17895b82362a64f5ff7ade5/diff:/var/lib/docker/overlay2/1833ae7c9ed0dfe260149986d6c42c4280ae5577d93299d5f6ff8788c9151482/diff:/var/lib/docker/overlay2/a67e82b236c220b56fb77b6710d34c2bbcf015b9fe9201c6c9c6150e032be0ae/diff:/var/lib/docker/overlay2/13f40a71fea1351986194f2db49d8a299eab7bcb416c60f9238e722ef43586d8/diff:/var/lib/docker/overlay2/c06a15cee56132b770b164992f24b66617b13c6a9dcbefcc366b5a870cd43d38/diff:/var/lib/docker/overlay2/bfeaa31e1b156bcff82488babf215c32785022d5062e66fefcfb49bf9ddd6364/diff:/var/lib/docker/overlay2/98365f74934fa043d3ee18926949dd39e94ffecab426fde44d2d4a3b7daec840/diff:/var/lib/docker/overlay2/e731ab57e6279734052ea7e87b42edea56dcef1ee080f3a10c10c313a1b704d7/diff:/var/lib/docker/overlay2/7fc392fcc2dbefa96897105dfbec58b4b06217947d233f7be8c10317ddca7e7c/diff:/var/lib/docker/overlay2/1174e41a7eb922e0fe741134b719e562d52ad9aede667d2545ec6bd01dae5689/diff:/var/lib/docker/overlay2/1a3ed9a80c36899cd80e57eddde7ca55519ed80e773b1358bd0b8d4f0ed8bdeb/diff",
"MergedDir": "/var/lib/docker/overlay2/9abef40215aad31d1b0971413126462f3f5c8b5c9fac9574e0bd2f077ef596a9/merged",
"UpperDir": "/var/lib/docker/overlay2/9abef40215aad31d1b0971413126462f3f5c8b5c9fac9574e0bd2f077ef596a9/diff",
"WorkDir": "/var/lib/docker/overlay2/9abef40215aad31d1b0971413126462f3f5c8b5c9fac9574e0bd2f077ef596a9/work"
}
},
"Mounts": [
{
"Type": "volume",
"Name": "990c5fcf0894d43bddf85d5f38b83c3b92056a0c09ffee2889f7743a9f51477a",
"Source": "/var/lib/docker/volumes/990c5fcf0894d43bddf85d5f38b83c3b92056a0c09ffee2889f7743a9f51477a/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
"Config": {
"Hostname": "687ce880b698",
"Domainname": "",
"User": "",
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"3306/tcp": {},
"33060/tcp": {}
},
"Tty": true,
"OpenStdin": true,
"StdinOnce": true,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOSU_VERSION=1.7",
"MYSQL_MAJOR=5.7",
"MYSQL_VERSION=5.7.28-1debian9"
],
"Cmd": [
"/bin/bash"
],
"Image": "mysql:5.7",
"Volumes": {
"/var/lib/mysql": {}
},
"WorkingDir": "",
"Entrypoint": [
"docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "a84fe61a69a90cd8cb58bb18f22a5190ab18a78502cf62ce865934aa5dede222",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"3306/tcp": null,
"33060/tcp": null
},
"SandboxKey": "/var/run/docker/netns/a84fe61a69a9",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "95a2dc39ca8fa6909e2e29c7ed4a89bc579b6a8c64ff219b7092d3289c7b7f82",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "bf62f97be7c1b9542ff830a6d695152e21333da0a96509b479c66bb286376b33",
"EndpointID": "95a2dc39ca8fa6909e2e29c7ed4a89bc579b6a8c64ff219b7092d3289c7b7f82",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02"
}
}
}
}
]
# 只查看ip地址
[root@localhost gp6]# docker inspect --format='{{.NetworkSettings.IPAddress}}' gp6-mysql-5.7
172.17.0.2
容器IP
8将容器保存为镜像
# 将将容器保存为镜像
[root@localhost gp6]# docker commit -m="描述信息" -a="指定镜像作者" gp6-nginx gp6-nginx-image
sha256:7b228a928b93221bd513ef749b9ef9a75a747fdfd984ab9e14f32107ae010c1b
# 查看镜像列表
[root@localhost gp6]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gp6-nginx-image latest 7b228a928b93 10 seconds ago 126MB
tomcat 8-jdk8-openjdk ed94f55483b8 3 days ago 507MB
redis latest 9b188f5fb1e6 4 days ago 98.2MB
nginx latest f7bb5701a33c 9 days ago 126MB