Docker容器的详解已经在前面的博客提到​​​
本篇博客讲解Docker的基本指令和用法:
实验环境:rhel7.0,在物理机操作

Docker 是一个开源的应用容器引擎,主要利用 linux 内核 namespace 实现沙盒隔离,用用cgroup 实现资源限制。
Docker 支持三种不同的镜像层次存储的 drivers:
aufs、devicemapper、btrfs ;

安装docker容器:

[root@foundation38 Desktop]# ls
docker timg.jpg
[root@foundation38 Desktop]# cd docker/
[root@foundation38 docker]# ls
docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
[root@foundation38 docker]# yum install docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm -y 所需安装包在阿里云镜像仓库里面均可以下载
[root@foundation38 docker]# systemctl start docker.service 开启服务
[root@foundation38 docker]# docker info 查看信息
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.1-ce
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.el7.x86_64
Operating System: Red Hat Enterprise Linux Server 7.3 (Maipo)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.749 GiB
Name: foundation38.ilt.example.com
ID: JY5P:HDZ2:XUEK:A5AZ:23NV:4EGX:5L6B:KEKV:F43J:6MHJ:YN4X:B3FG
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop


演示管理docker的基础命令:

# docker run -it --name vm1 ubuntu bash   创建容器
# docker ps -a 查看容器状态
# docker attach vm1 连接容器
# docker top vm1 查看容器进程
# docker logs vm1 查看容器指令输出 -f 参数可以实时查看
# docker inspect vm1 查看容器详情
# docker stats vm1 查看容器资源使用率
# docker diff vm1 查看容器修改
# docker run -d --name vm1 ubuntu bash -c "while true; do echo westos; sleep 1; done"
后台运行
# docker stop vm1 停止容器
# docker start vm1 启动容器
# docker kill vm1 强制干掉容器
# docker restart vm1 重启容器
# docker pause/unpause vm1 暂停/恢复容器
# docker rm vm1 删除容器
# docker export vm1 > vm1.tar 导出容器
# docker import vm1.tar image 导入容器为镜像 image
[root@foundation38 Desktop]# docker  输入docker加一个空格加两下Tab可以看到docker可以使用的命令
build export kill plugin rmi stats version
commit help load port run stop volume
container history login ps save swarm wait
cp image logout pull search system
create images logs push secret tag
diff import network rename service top
events info node restart stack unpause
exec inspect pause rm start update
[root@foundation38 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@foundation38 docker]# docker ps 查看docker进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation38 docker]# docker ps -a 查看docker隐藏进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_02


简单搭建一个2048小游戏:

[root@foundation38 Desktop]# docker load -i game2048.tar 导入镜像
[root@foundation38 Desktop]# docker run -d --name vm1 game2048 运行镜像
3650d596dd3c43752efee46fbae19d4b41121597e1868d78976a84f6c4fd1125
[root@foundation38 Desktop]# docker inspect vm1 查看镜像信息
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "21ca12d3508c3e19aaece046156199a461117e85da9ba634134b1e8c3914d69f",
"EndpointID": "4f92e361846c1533fefd065da06bd0b60138f5a475929c82a26d6ea7f4e3b27f",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2", 在网页用于访问的IP,对外开放
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02"
}
}
}
}
]

可以查看到docker的IP信息:

[root@foundation38 Desktop]# ip addr  查看IP可以看到对应的docker
9: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 02:42:30:3c:02:cb brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:30ff:fe3c:2cb/64 scope link
valid_lft forever preferred_lft forever
13: veth1b24846@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
link/ether de:3f:84:82:8a:d5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::dc3f:84ff:fe82:8ad5/64 scope link
valid_lft forever preferred_lft forever
[root@foundation38 Desktop]# iptables -t nat -nL 查看策略
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
RETURN all -- 192.168.122.0/24 224.0.0.0/24
RETURN all -- 192.168.122.0/24 255.255.255.255
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24

Chain DOCKER (2 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_03


在网页可以看到小游戏界面:

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_04


Docker命令演示:

[root@foundation38 Desktop]# systemctl start docker.service 开启docker服务
[root@foundation38 Desktop]# systemctl enable docker.service 开机自动启动docker服务
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@foundation38 Desktop]# cd /tmp/docker/
[root@foundation38 docker]# ls
Dockerfile ssh web yum.repo
[root@foundation38 docker]# docker history nginx 列出nginx的历史
IMAGE CREATED CREATED BY SIZE COMMENT
c82521676580 3 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daem... 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
<missing> 3 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/ngi... 0 B
<missing> 3 weeks ago /bin/sh -c set -x && apt-get update && a... 53.7 MB
<missing> 3 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.2.... 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.... 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX ... 0 B
<missing> 5 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0 B
<missing> 5 weeks ago /bin/sh -c #(nop) ADD file:919939fa0224727... 55.3 MB

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_05

[root@foundation38 docker]# docker ps -a  查看当前进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
658ccfb8f90b e8c13b6b6ffc "/bin/sh -c 'yum i..." 38 hours ago Exited (1) 38 hours ago reverent_pare
2fe7bc2ab2db e8c13b6b6ffc "/bin/sh -c 'rpmdb..." 38 hours ago Exited (1) 38 hours ago condescending_shockley
d48a47fc8457 e8c13b6b6ffc "/bin/sh -c 'rpmdb..." 38 hours ago Exited (1) 38 hours ago pedantic_albattani
a8e5df7b597f e8c13b6b6ffc "/bin/sh -c 'rpmdb..." 38 hours ago Exited (1) 38 hours ago thirsty_albattani
add450cfcd51 2e285b9b31d8 "/bin/sh -c 'rpmdb..." 39 hours ago Exited (1) 39 hours ago keen_hugle
3b780163167b e8c13b6b6ffc "/bin/sh -c 'yum i..." 39 hours ago Exited (1) 39 hours ago admiring_visvesvaraya
ff76dfe0207f rhel7 "bash" 39 hours ago Exited (255) 11 minutes ago vm1
5be819f68b2e ubuntu "/bin/bash" 40 hours ago Exited (0) 39 hours ago vm2
[root@foundation38 docker]# docker rm -f `docker ps -aq` 将所有docker杀死
658ccfb8f90b
2fe7bc2ab2db
d48a47fc8457
a8e5df7b597f
add450cfcd51
3b780163167b
ff76dfe0207f
5be819f68b2e
[root@foundation38 docker]# docker ps -a 查看docker进程为空
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_06

[root@foundation38 docker]# docker run -d --name vm1 nginx   创建并运行nginx
58a337021e4860332e5ac4b59bf257263e8410307ca7360eab08fcd32fae2f60
[root@foundation38 docker]# docker ps 查看进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58a337021e48 nginx "nginx -g 'daemon ..." 11 seconds ago Up 11 seconds 80/tcp vm1
[root@foundation38 docker]# curl 172.17.0.2 调用curl命令可以看到nginx的测试页
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_07

[root@foundation38 docker]# docker container attach vm1  连接容器
[root@foundation38 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation38 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58a337021e48 nginx "nginx -g 'daemon ..." 45 seconds ago Exited (0) 7 seconds ago vm1
[root@foundation38 docker]# docker start vm1 开启vm1容器
vm1
[root@foundation38 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58a337021e48 nginx "nginx -g 'daemon ..." 54 seconds ago Up 2 seconds 80/tcp vm1

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_08

[root@foundation38 docker]# docker run -it --name vm2 nginx  创建并运行vm2容器
^C[root@foundation38 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58a337021e48 nginx "nginx -g 'daemon ..." About a minute ago Up 31 seconds 80/tcp vm1
[root@foundation38 docker]# docker start vm2 开启容器
vm2
[root@foundation38 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be0690025ee0 nginx "nginx -g 'daemon ..." 19 seconds ago Up 1 second 80/tcp vm2
58a337021e48 nginx "nginx -g 'daemon ..." About a minute ago Up 41 seconds 80/tcp vm1
[root@foundation38 docker]# docker run -it --name vm3 nginx bash 镜像后面所接命令可以直接执行
root@864c562dfba3:/#
root@864c562dfba3:/# [root@foundation38 docker]#

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_09

[root@foundation38 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
864c562dfba3 nginx "bash" 17 seconds ago Up 16 seconds 80/tcp vm3
be0690025ee0 nginx "nginx -g 'daemon ..." 52 seconds ago Up 35 seconds 80/tcp vm2
58a337021e48 nginx "nginx -g 'daemon ..." 2 minutes ago Up About a minute 80/tcp vm1
[root@foundation38 docker]# docker container attach vm3 连接容器
root@864c562dfba3:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@864c562dfba3:/# exit

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_10

[root@foundation38 tmp]# docker container exec --help

Usage: docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables (default [])
--help Print usage
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
[root@foundation38 tmp]# docker container exec -it vm1 bash
root@58a337021e48:/# hostname
58a337021e48
root@58a337021e48:/# exit

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_11

[root@foundation38 ~]# docker search hello-world 
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
hello-world Hello World! (an example of minimal Docker... 624 [OK]
kitematic/hello-world-nginx A light-weight nginx container that demons... 108
tutum/hello-world Image to test docker deployments. Has Apac... 54 [OK]
dockercloud/hello-world Hello World! 14 [OK]
hypriot/armhf-hello-world Hello World! (an example of minimal Docker... 6
crccheck/hello-world Hello World web server in under 2.5 MB 5 [OK]
marcells/aspnet-hello-world ASP.NET vNext - Hello World 5 [OK]
armhf/hello-world Hello World! (an example of minimal Docker... 5
bonomat/nodejs-hello-world a simple nodejs hello world container 3 [OK]
ppc64le/hello-world Hello World! (an example of minimal Docker... 2
carinamarina/hello-world-app This is a sample Python web application, r... 1 [OK]
kornkitti/express-hello-world Node.js Express Hello World : https://gith... 1
hello-seattle Hello from DockerCon 2016 (Seattle)! 1 [OK]
infrastructureascode/hello-world A tiny "Hello World" web server with a hea... 0 [OK]
gscrivano/hello-world hello world example system container 0 [OK]
ansibleplaybookbundle/hello-world-apb An APB which deploys a sample Hello World!... 0 [OK]
s390x/hello-world Hello World! (an example of minimal Docker... 0
markmnei/hello-world-java Automated build of Hello World Java 0 [OK]
burdz/hello-world-k8s To provide a simple webserver that can hav... 0 [OK]
kevindockercompany/hello-world 0
arm32v7/hello-world Hello World! (an example of minimal Docker... 0
uniplaces/hello-world 0
ansibleplaybookbundle/hello-world-db-apb An APB which deploys a sample Hello World!... 0 [OK]
lkungs/docker-hello-world Simple Hello World Example 0 [OK]
ashleybarrett/node-hello-world Simple "hello world" image using node. 0
[root@foundation38 ~]# docker pull hello-world 拉取一个hello-world
Using default tag: latest
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest
[root@foundation38 ~]# docker images hello-world
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 2cb0d9787c4d 5 weeks ago 1.85 kB 最小的镜像1.85K

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_12

[root@foundation38 ~]# docker run hello-world  运行hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_13

[root@foundation38 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be0690025ee0 nginx "nginx -g 'daemon ..." 53 minutes ago Up 52 minutes 80/tcp vm2
58a337021e48 nginx "nginx -g 'daemon ..." 54 minutes ago Up 53 minutes 80/tcp vm1
[root@foundation38 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f8f59f9ee5b hello-world "/hello" 21 seconds ago Exited (0) 19 seconds ago keen_yalow
864c562dfba3 nginx "bash" 52 minutes ago Exited (0) 52 minutes ago vm3
be0690025ee0 nginx "nginx -g 'daemon ..." 53 minutes ago Up 53 minutes 80/tcp vm2
58a337021e48 nginx "nginx -g 'daemon ..." 54 minutes ago Up 53 minutes 80/tcp vm1
[root@foundation38 ~]# docker rm keen_yalow
keen_yalow
[root@foundation38 ~]# docker run -d hello-world
7bb4b58163a31b1c20c21703d66ecd6ce097d5fa700c5b6254486e6c1d46a121

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_14

[root@foundation38 ~]# docker rm -f `docker ps -aq`
7bb4b58163a3
864c562dfba3
be0690025ee0
58a337021e48

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_15


调用Docker测试nginx服务:

[root@foundation38 Desktop]# ls   从阿里云可以下载对应的镜像包
docker game2048.tar nginx.tar timg.jpg
[root@foundation38 Desktop]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3650d596dd3c game2048 "/bin/sh -c 'sed -..." 51 minutes ago Up 51 minutes 80/tcp, 443/tcp vm1
[root@foundation38 Desktop]# docker load -i nginx.tar 必须生效加载镜像才可以
d8bd0657b25f: Loading layer 130.9 MB/130.9 MB
a582cd499e0f: Loading layer 1.024 kB/1.024 kB
f5a1ef78853b: Loading layer 1.024 kB/1.024 kB
605083c53cc5: Loading layer 1.024 kB/1.024 kB
c95d1af3960d: Loading layer 67.97 MB/67.97 MB
0a410ba58143: Loading layer 3.584 kB/3.584 kB
fb6fc13654c9: Loading layer 1.024 kB/1.024 kB
36b0adefb2f3: Loading layer 1.024 kB/1.024 kB
[root@foundation38 Desktop]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest af4b3d7d5401 2 years ago 190 MB
[root@foundation38 Desktop]# docker run -d --name vm2 nginx 创建vm2容器,后台运行nginx,-d表示打入后台
10be2031da227637529b76f6395f32134b78a9f4b642aa361ad46b2216a71f5a
[root@foundation38 Desktop]# docker
build export kill plugin rmi stats version
commit help load port run stop volume
container history login ps save swarm wait
cp image logout pull search system
create images logs push secret tag
diff import network rename service top
events info node restart stack unpause
exec inspect pause rm start update
[root@foundation38 Desktop]# docker kill vm2 将vm2容器直接kill掉
vm2
[root@foundation38 Desktop]# docker ps -a 查看进程还没有删除干净
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
10be2031da22 nginx "nginx -g 'daemon ..." About a minute ago Exited (137) 43 seconds ago vm2
3650d596dd3c game2048 "/bin/sh -c 'sed -..." 54 minutes ago Up 54 minutes 80/tcp, 443/tcp vm1
[root@foundation38 Desktop]# docker rm vm2 调用rm删除进程
vm2
[root@foundation38 Desktop]# docker run -d --name vm2 -p 8080:80 nginx ca3a4ccd337474451a289e427d009d2730d5e63c00ead971e149579629c3e078
指定端口运行向外部开放的是8080的端口因为本机装有阿帕其不然会端口冲突

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_16


在网页访问可以看到nginx,IP默认是递增的,我们也可以使用docker inspect vm2来查看:

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_17

[root@foundation38 Desktop]# docker ps   查看docker进程已经有了两个进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca3a4ccd3374 nginx "nginx -g 'daemon ..." 6 minutes ago Up 6 minutes 443/tcp, 0.0.0.0:8080->80/tcp vm2
3650d596dd3c game2048 "/bin/sh -c 'sed -..." About an hour ago Up About an hour 80/tcp, 443/tcp vm1
[root@foundation38 Desktop]# docker
build export kill plugin rmi stats version
commit help load port run stop volume
container history login ps save swarm wait
cp image logout pull search system
create images logs push secret tag
diff import network rename service top
events info node restart stack unpause
exec inspect pause rm start update
[root@foundation38 Desktop]# docker images
game2048 nginx

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_18

[root@foundation38 Desktop]# docker container  调用容器命令
attach diff kill port rm stop wait
commit exec logs prune run top
cp export ls rename start unpause
create inspect pause restart stats update
[root@foundation38 Desktop]# docker container stop vm2 停止vm2
vm2
[root@foundation38 Desktop]# docker stop vm1 停止vm1
vm1
[root@foundation38 Desktop]# docker ps -a 查看所有容器的进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca3a4ccd3374 nginx "nginx -g 'daemon ..." 28 minutes ago Exited (0) About a minute ago vm2
3650d596dd3c game2048 "/bin/sh -c 'sed -..." About an hour ago Exited (137) About a minute ago vm1

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_19


利用docker创建一个交互式容器进行测试:

[root@foundation38 Desktop]# docker load -i ubuntu.tar   加载ubuntu镜像
[root@foundation38 Desktop]# docker run -it --name vm3 ubuntu 创建一个vm3的镜像,-it表示打开交互式docker界面
root@45994ffed436:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@45994ffed436:/# pwd
/
root@45994ffed436:/# ip addr 可以查看IP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::42:acff:fe11:2/64 scope link
valid_lft forever preferred_lft forever

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_20


关于如何结束交互式界面:

ctrl+pq不会停止容器在后台运行
ctrl+d会直接结束容器,释放内存
rm删除容器。rmi删除镜像

docker的基本命令演示:

[root@foundation38 Desktop]# docker cp /etc/passwd vm3:/tmp 调用docker将文件传递到指定路径下
[root@foundation38 Desktop]# docker run -it --name vm3 ubuntu 运行vm3
root@28199108092d:/# cd /tmp
root@28199108092d:/tmp# ls 本来目录下为空
root@28199108092d:/tmp# cd /tmp/
root@28199108092d:/tmp# ls
root@28199108092d:/tmp# ls 调用docker之后的对应的目录下有了文件
passwd
root@28199108092d:/tmp#touch file 在shell建立文件

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_21

[root@foundation38 Desktop]# docker exec vm3 rm -f /tmp/passwd    运行vm3删除建立的文件
[root@foundation38 Desktop]# docker run -it --name vm3 ubuntu
root@28199108092d:/# cd /tmp
root@28199108092d:/tmp# ls
root@28199108092d:/tmp# cd /tmp/
root@28199108092d:/tmp# ls
passwd
root@28199108092d:/tmp# ls 查看文件已经被删除
root@28199108092d:/tmp#

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_22

[root@foundation38 Desktop]# docker commit -m "touch files" vm3 test  提交的方式建立文件
sha256:f6fca15c121af1100837fecb0704e5a18bc58197c6534bb2ce85499a064f38ec
[root@foundation38 Desktop]# docker images test
REPOSITORY TAG IMAGE ID CREATED SIZE
test latest f6fca15c121a 11 seconds ago 188 MB
[root@foundation38 Desktop]# docker rm -f vm3 删除vm3容器
vm3
[root@foundation38 Desktop]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca3a4ccd3374 nginx "nginx -g 'daemon ..." 39 minutes ago Exited (0) 12 minutes ago vm2
3650d596dd3c game2048 "/bin/sh -c 'sed -..." About an hour ago Exited (137) 12 minutes ago vm1
[root@foundation38 Desktop]# docker run -it --name vm3 test 重新运行vm3容器
root@0a4a8e41827d:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@0a4a8e41827d:/# cd
root@0a4a8e41827d:~# ls
root@0a4a8e41827d:~# file 查看有了建立的文件

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_23

[root@foundation38 Desktop]# docker rm vm3  删除容器
vm3
[root@foundation38 Desktop]# docker rmi test 删除镜像
Untagged: test:latest
Deleted: sha256:f6fca15c121af1100837fecb0704e5a18bc58197c6534bb2ce85499a064f38e
[root@foundation38 Desktop]# docker ps -a 查看所有容器的进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ebb8052229fe nginx "nginx -g 'daemon ..." 50 seconds ago Exited (0) 7 seconds ago vm1
[root@foundation38 Desktop]# docker rm -f vm1 删除vm1容器
vm1
[root@foundation38 Desktop]# docker ps -a 查看所有的docker进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_24


关于docker容器的rm,stop和pause区别:

[root@foundation38 Desktop]# docker ps  查看docker状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation38 Desktop]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation38 Desktop]# docker run -it --name vm1 ubuntu 创建容器并运行
root@326d8f659f7e:/# [root@foundation38 Desktop]# ctrl+p+q退出环境,不结束容器
[root@foundation38 Desktop]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
326d8f659f7e ubuntu "/bin/bash" 12 seconds ago Up 11 seconds vm1
[root@foundation38 Desktop]# docker container pause vm1 将容器暂停
vm1
[root@foundation38 Desktop]# docker ps 查看状态为暂停状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
326d8f659f7e ubuntu "/bin/bash" 52 seconds ago Up 51 seconds (Paused) vm1

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_25

[root@foundation38 Desktop]# docker inspect vm1  暂停状态下依旧可以查看IP
"NetworkSettings": {
"Bridge": "",
"SandboxID": "bff4a202abe989776ae80a3a984da78786a86e2dbe207672c94873e8d5eae5ea",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/bff4a202abe9",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "a215b9cf4c2a9426e1f1be2d800d7fa5f0b341f2dede3a23b47b0726309dcb46",
"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": "1ff19c2e7e40d0fe5324b4515046564e9d2d37c85bada7c288d01330a399b1ce",
"EndpointID": "a215b9cf4c2a9426e1f1be2d800d7fa5f0b341f2dede3a23b47b0726309dcb46",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02"
}
}
}
}
]

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_26

[root@foundation38 Desktop]# brctl show 查看桥接
bridge name bridge id STP enabled interfaces
br0 8000.0021cc67fe88 no enp0s25
docker0 8000.02428cd66a63 no veth404d1ab
virbr0 8000.525400b006fe yes virbr0-nic
virbr1 8000.525400000eb9 yes virbr1-nic
[root@foundation38 Desktop]# docker container unpause vm1 解除暂停状态
vm1

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_27

[root@foundation38 Desktop]# docker ps  查看docker进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
326d8f659f7e ubuntu "/bin/bash" 4 minutes ago Up 4 minutes vm1
[root@foundation38 Desktop]# docker stop vm1 停止docker
vm1
[root@foundation38 Desktop]# docker ps 查询不到docker进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation38 Desktop]# docker ps -a 查看状态为退出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
326d8f659f7e ubuntu "/bin/bash" 4 minutes ago Exited (0) 15 seconds ago vm1
[root@foundation38 Desktop]# brctl show 没有桥接,容器已经结束
bridge name bridge id STP enabled interfaces
br0 8000.0021cc67fe88 no enp0s25
docker0 8000.02428cd66a63 no
virbr0 8000.525400b006fe yes virbr0-nic
virbr1 8000.525400000eb9 yes virbr1-nic

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_28

[root@foundation38 Desktop]# docker inspect vm1  停止状态无法查看IP
"NetworkSettings": {
"Bridge": "",
"SandboxID": "bff4a202abe989776ae80a3a984da78786a86e2dbe207672c94873e8d5eae5ea",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": null,
"SandboxKey": "/var/run/docker/netns/bff4a202abe9",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "1ff19c2e7e40d0fe5324b4515046564e9d2d37c85bada7c288d01330a399b1ce",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": ""
}
}
}
}
]

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_29

[root@foundation38 Desktop]# docker rm vm1  rm代表将容器的缓存等文件全部删除
vm1

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_30


镜像管理:

镜像用来创建容器,是容器的只读模板,默认可以从 docker hub 上下载。docker 的镜像是
增量修改,每次创建新的镜像都会在父镜像上构建一个增量的层,基于 AUFS 技术。
# docker search 查询镜像
# docker pull 拉取镜像
# docker push 推送镜像
镜像默认可以从 docker hub 上下载,这是 docker 官方的公共仓库,为我们免费提供了大量
已经容器化的应用镜像,避免我们重复的去造轮子。但是官方并没有在国内部署服务器,
如果你不走 vpn 的话真的是太慢了,报错和超时让人非常的郁闷。
我们可以使用阿里云进行镜像加速直接下载镜像。

我们可以直接搜索阿里云来注册阿里云:

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_31


直接搜索镜像加速器可以看到自己专有的镜像加速器:

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_32


Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_33


根据官方文档进行配置:

[root@foundation38 ~]# cd /etc/docker/
[root@foundation38 docker]# ls
key.json
[root@foundation38 docker]# vim daemon.json
[root@foundation38 docker]# cat daemon.json
{
"registry-mirrors": ["https://w09mfhg3.mirror.aliyuncs.com"] 加入自己的镜像加速器
}
[root@foundation38 docker]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest af4b3d7d5401 2 years ago 190 MB
[root@foundation38 docker]# docker rmi nginx 删除nginx容器

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_34

[root@foundation38 docker]# docker images nginx 
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@foundation38 docker]# docker search nginx 搜索镜像文件
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 9307 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 1385 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 609 [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as... 396 [OK]
kong Open-source Microservice & API Management ... 215 [OK]
webdevops/php-nginx Nginx with PHP-FPM 111 [OK]
kitematic/hello-world-nginx A light-weight nginx container that demons... 108
zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server ... 62 [OK]
bitnami/nginx Bitnami nginx Docker Image 57 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 43 [OK]
linuxserver/nginx An Nginx container, brought to you by Linu... 38
tobi312/rpi-nginx NGINX on Raspberry Pi / armhf 20 [OK]
blacklabelops/nginx Dockerized Nginx Reverse Proxy Server. 12 [OK]
nginxdemos/nginx-ingress NGINX Ingress Controller for Kubernetes . ... 11
wodby/drupal-nginx Nginx for Drupal container image 10 [OK]
webdevops/nginx Nginx container 8 [OK]
nginxdemos/hello NGINX webserver that serves a simple page ... 8 [OK]
centos/nginx-18-centos7 Platform for running nginx 1.8 or building... 7
1science/nginx Nginx Docker images that include Consul Te... 4 [OK]
centos/nginx-112-centos7 Platform for running nginx 1.12 or buildin... 4
pebbletech/nginx-proxy nginx-proxy sets up a container running ng... 2 [OK]
travix/nginx NGinx reverse proxy 1 [OK]
toccoag/openshift-nginx Nginx reverse proxy for Nice running on sa... 1 [OK]
ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 0 [OK]
mailu/nginx Mailu nginx frontend 0 [OK]
[root@foundation38 docker]# docker ps 查看docker进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation38 docker]# docker ps -a 查看所有docker进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_35

[root@foundation38 docker]# docker pull nginx   拉取nginx镜像,直接保证联网的状态进行下载
Using default tag: latest
latest: Pulling from library/nginx
be8881be8156: Pull complete
32d9726baeef: Pull complete
87e5e6f71297: Pull complete
Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
Status: Downloaded newer image for nginx:latest
[root@foundation38 docker]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c82521676580 3 weeks ago 109 MB
[root@foundation38 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@foundation38 docker]# docker container prune 命令会清理掉所有处于stopped状态的容器;
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y 询问是否继续
Total reclaimed space: 0 B 由于之前已经删除干净所以返回值为零
[root@foundation38 docker]# docker run -d --name vm1 nginx 重新定义vm1运行nginx镜像
13ec7f98f819d72174de02f85b64703b37390cc0423df87addbcde391282c101
[root@foundation38 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
13ec7f98f819 nginx "nginx -g 'daemon ..." 7 seconds ago Up 6 seconds 80/tcp vm1

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_36

[root@foundation38 docker]# docker history nginx  查看nginx历史
IMAGE CREATED CREATED BY SIZE COMMENT
c82521676580 3 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daem... 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B
<missing> 3 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/ngi... 0 B
<missing> 3 weeks ago /bin/sh -c set -x && apt-get update && a... 53.7 MB
<missing> 3 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.2.... 0 B
<missing> 3 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.... 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX ... 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0 B
<missing> 4 weeks ago /bin/sh -c #(nop) ADD file:919939fa0224727... 55.3 MB

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_37


在网页可以访问nginx的测试页:

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_38


自己编写一个测试页:

[root@foundation38 docker]# cd
[root@foundation38 ~]# vim index.html
[root@foundation38 ~]# cat in
index.html install.sls
[root@foundation38 ~]# cat index.html
<h1>www.westos.org</h1>
[root@foundation38 ~]# docker cp index.html vm1:/usr/share/nginx/html/

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_39


在网页可以看到自己的测试页:

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_40


数据卷管理:

docker run 在创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,-v
的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共享一个目录。
挂载数据卷到新创建的容器上:
# docker run -it --name westos -v /tmp/data1:/data1 -v /tmp/data2:/data2 rhel7 /bin/bash
-v 参数可以重复使用,挂载多个数据卷到容器中,冒号前面的是宿主机的目录(本地目录不存在 docker 会自动创建),
冒号后面的是容器中的挂载目录。
注:docker commit 时卷的数据不会被保存。
默认挂载可以读写数据卷,也可以只读挂载:
# docker run -it --name westos2 -v /tmp/data2:/data2:ro rhel /bin/bash

利用数据卷的挂载来更改阿帕其的默认访问界面:

[root@foundation38 ~]# cd /tmp/
[root@foundation38 tmp]# ls
emacs1000
hsperfdata_kiosk
kde-kiosk
mozilla_kiosk0
renderlog
ssh-SAJ5IOf3MZm6
ssh-ysCqlGcPnggd
systemd-private-067b388b316c437981de72f8d36fe115-cups.service-DsNMfn
systemd-private-067b388b316c437981de72f8d36fe115-httpd.service-NPziRj
systemd-private-35d0246b4f8542dc9b810d55e0b828be-colord.service-3s9cSw
systemd-private-35d0246b4f8542dc9b810d55e0b828be-cups.service-pPemX2
systemd-private-35d0246b4f8542dc9b810d55e0b828be-httpd.service-1OZgrT
systemd-private-35d0246b4f8542dc9b810d55e0b828be-rtkit-daemon.service-zQHqhx
systemd-private-35d0246b4f8542dc9b810d55e0b828be-systemd-machined.service-6AwMau
systemd-private-44c42ecf32a14a2686f38270cadbebd5-colord.service-beHV0z
systemd-private-44c42ecf32a14a2686f38270cadbebd5-cups.service-yZcsVR
systemd-private-44c42ecf32a14a2686f38270cadbebd5-httpd.service-20Vb3I
systemd-private-44c42ecf32a14a2686f38270cadbebd5-rtkit-daemon.service-2Ge6Rp
systemd-private-802ec68939024062956f35c094ef40f5-cups.service-EBiqi4
systemd-private-802ec68939024062956f35c094ef40f5-httpd.service-sz47uS
systemd-private-802ec68939024062956f35c094ef40f5-rtkit-daemon.service-6aEqbJ
tracker-extract-files.1000
wps-kiosk
[root@foundation38 tmp]# mkdir docker
[root@foundation38 tmp]# cd docker/
[root@foundation38 docker]# ls
[root@foundation38 docker]# mkdir web
[root@foundation38 docker]# cd web/

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_41

[root@foundation38 web]# ls
[root@foundation38 web]# vim index.html
[root@foundation38 web]# cat index.html 自己编写的测试页
<h1>hello xfl </h1>
[root@foundation38 web]# pwd
/tmp/docker/web
[root@foundation38 web]# cd -
/tmp/docker
[root@foundation38 docker]# cd web/
[root@foundation38 web]# docker stop vm1
vm1
[root@foundation38 web]# docker rm -f vm1
vm1
[root@foundation38 web]# docker run -d --name vm1 -v /tmp/docker/web/:/usr/share/nginx/html nginx 直接进行挂载,直接在后端更改测试页阿帕其就可以直接访问不用每次更改默认访问文件
2aadfc19517a345863c62a2bec15b23cc35afb1078463c27319428bbd37f2670

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_42


在网页测试有了后端写的测试页,直接挂载,修改后端即可改变测试页:

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_43


进行rhel7的镜像的读取:

[root@foundation38 ~]# cd /home/kiosk/Desktop/
[root@foundation38 Desktop]# ls
docker docker1 game2048.tar nginx.tar rhel7.tar timg.jpg ubuntu.tar
[root@foundation38 Desktop]# docker load -i rhel7.tar
e1f5733f050b: Loading layer 147.1 MB/147.1 MB

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_44

[root@foundation38 Desktop]# docker run -it --name vm1 rhel7 bash   创建一个容器
bash-4.2#
bash-4.2# [root@foundation38 Desktop]# 使用ctrl+q+p三键退出不会释放内存
[root@foundation38 Desktop]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56c212614231 rhel7 "bash" 30 minutes ago Up 30 minutes vm1
[root@foundation38 Desktop]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56c212614231 rhel7 "bash" 30 minutes ago Up 30 minutes vm1
[root@foundation38 Desktop]# docker rm -f vm1
\vm1
[root@foundation38 Desktop]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_45


挂载的方式即容器内和物理机的操作是同步的,只是看挂载时候所给的权限:

[root@foundation38 Desktop]# docker run -it --name vm1 -v /tmp/data1:/data1 -v /tmp/data2:/data2 -v /etc/yum.repos.d/yum.repo:/etc/yum.repos.d/yum.repo:ro rhel7 bash   使用挂载的方式创建容器
bash-4.2# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 307430744 31370556 276060188 11% /
overlay 307430744 31370556 276060188 11% /
tmpfs 1965404 0 1965404 0% /dev
tmpfs 1965404 0 1965404 0% /sys/fs/cgroup
/dev/mapper/rhel_foundation38-root 307430744 31370556 276060188 11% /data1
shm 65536 0 65536 0% /dev/shm
tmpfs 1965404 0 1965404 0% /proc/kcore
tmpfs 1965404 0 1965404 0% /proc/timer_list
tmpfs 1965404 0 1965404 0% /proc/timer_stats
tmpfs 1965404 0 1965404 0% /proc/sched_debug
tmpfs 1965404 0 1965404 0% /sys/firmware
bash-4.2# cd /
bash-4.2# ls
bin data1 dev home lib64 mnt proc run srv tmp var
boot data2 etc lib media opt root sbin sys usr

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_46

bash-4.2# cd /data2/   挂载的时候data1和data2都是没有读写权限限制的
bash-4.2# ls
bash-4.2# touch file 建立文件
bash-4.2# cd /data1/
bash-4.2# ls
bash-4.2# touch file1 建立文件
bash-4.2# touch file[root@foundation38 Desktop]# 用ctrl+q+p退出容器但是不释放内存
[root@foundation38 Desktop]# cd /tmp/
[root@foundation38 tmp]# cd data1/
[root@foundation38 data1]# ls
file1 已经可以看到建立的文件
[root@foundation38 data1]# touch file2

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_47

[root@foundation38 tmp]# docker container attach vm1  连接容器
bash-4.2# cd /data1/
bash-4.2# ls
file1 file2 可以看到建立的文件
bash-4.2# rm -fr * 在容器中删除
bash-4.2# ls

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_48

[root@foundation38 data1]# ls  在目录下也看不到文件
[root@foundation38 data1]#

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_docker_49

[root@foundation38 data1]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2beb263b0f25 rhel7 "bash" 12 minutes ago Up 12 minutes vm1
[root@foundation38 data1]# docker rm -f vm1
vm1
[root@foundation38 data1]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Docker_50

[root@foundation38 data1]# docker run -it --name vm2 -v /tmp/backup:/backup rhel7 bash
bash-4.2# exit
[root@foundation38 data1]# docker run --rm -v /tmp/backup:/backup ubuntu tar cf /backup/etc.tar /etc
tar: Removing leading `/' from member names
[root@foundation38 data1]# cd /tmp/backup/
[root@foundation38 backup]# ls
etc.tar

Docker容器学习 --- 容器管理+镜像管理+数据卷管理_Desktop_51