docker是什么?
提供快速、高效、轻量的微服务平台

1. 背景介绍
突破虚拟机对资源占用高、启动时间长、镜像存储大、集群规模小等限制,摆脱操作系统级的隔离级别,实现进程级管理。
主要专用名词:

chroot

namespaces命名空间
PID NET IPC MNT UTS

Cgroups资源分配管控

---------------------------
---------------------------

今世起源
LXC (LinuXContainer) ----> Docker (dotcloud)

版本
EE 企业版
CE 社区版

2. Docker的安装
2.0 yum源准备
采用阿里云作为yun源
curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.1 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r      ###显示重复项并排序,可找出最新版

yum install -y docker-ce

2.2 安装docker-ce
yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

附阿里云搭建docker库方法
搭建docker repo库
采用阿里云搭建步骤
vim /etc/yum.repos.d/docker-ce-internal.repo

添加内容:
[docker-ce-stable]
name=Docker CE Stable - $basearch
#baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

yum -y install docker-ce

2.3 启动Docker服务
systemctl daemon-reload
systemctl restart docker
docker version
docker info

2.4 配置镜像加速
阿里云Docker-hub
https://cr.console.aliyun.com/cn-hangzhou/mirrors

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://uoggbpok.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

或者:
vim /etc/docker/daemon.json

{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]    ###这里可在阿里云服务中创建一个镜像加速
}

3. Docker体系结构


docker_host client Registry三大部分
安装好docker后,即具备docker_host和client功能
服务端docker_host 管理容器,维护镜像
客户端client 通过docker命令:创建、拉取或下载(自动搜索并获取)、运行容器
注册中心Registry docker-hub 提供所有镜像索引、验证功能(部分镜像)、镜像存储、提供本地镜像库的更新,也可以用国内其他Registry

4. Docker镜像基础管理
4.1 获取镜像
docker search centos
docker pull centos:6.9
docker pull nginx

4.2 镜像基本查看
[root@docker ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6.8 82f3b5f3c58f 4 months ago 195 MB
centos 6.9 2199b8eb8390 4 months ago 195 MB
centos 7.5.1804 cf49811e3cdb 4 months ago 200 MB
centos 7.6.1810 f1cb7c7d58b7 4 months ago 202 MB
oldguo/centos_sshd v1.0
oldguo/centos_sshd v2.0
oldguo/centos_sshd v3.0
注解:
###repository(存储库) 如centos、nginx表示官方(docker-hub)镜像;如oldguo/centos_sshd表示私有库镜像或已修改名的镜像标识

###标识镜像唯一性的方法:
1. REPOSITORY:TAG
centos:7.5.1804
2. IMAGE ID (sha256:64位的号码,默认只截取12位)
cf49811e3cdb

查看镜像详细image id的方法:
[root@ora12c /]# docker image ls --no-trunc
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d 7 days ago 133MB
centos 6.9 sha256:2199b8eb8390197d175b1dd57ed79f53ed92ffa58e23826ada54113262237e56 18 months ago 195MB

4.3 查看某一镜像详细信息
[root@docker /]# docker image inspect ubuntu:latest
[root@docker /]# docker image inspect 82f3b5f3c58f

示例:
[root@ora12c /]# docker image inspect nginx:latest
[
{
"Id": "sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0"
],
"Parent": "",
"Comment": "",
"Created": "2020-09-10T12:33:10.502421624Z",
"Container": "c72d14cf840a1720d6a3edc1d2217754786d41b89e7afa9f3ca8f1a47e0bb8a7",
"ContainerConfig": {
"Hostname": "c72d14cf840a",
"Domainname": "",
"User": "",
"AttachStdin": false,
-------------部分截取----------------------

4.4 只查看镜像ID
[root@docker ~]# docker image ls -q

示例:
[root@ora12c /]# docker image ls -q
7e4d58f0e5f3
2199b8eb8390
[root@ora12c /]# docker image ls nginx -q
7e4d58f0e5f3

附初始学习docker对于docker命令不熟习,可使用--help查看帮助。主要看Usage:内容
[root@ora12c /]# docker image inspect --help

Usage: docker image inspect [OPTIONS] IMAGE [IMAGE...]

Display detailed information on one or more images

Options:
-f, --format string Format the output using the given Go template

4.5 镜像的导入和导出
[root@docker ~]# docker image save 3556258649b2 >/tmp/ubu.tar
[root@docker ~]# docker image rm 3556258649b2
[root@docker ~]# docker image load -i /tmp/ubu.tar
[root@docker ~]# docker image tag 3556258649b2 oldguo/ubu:v1

4.6 镜像的删除
[root@docker ~]# docker image rm -f 3556258649b2
[root@docker ~]# docker image rm -f `docker image ls -q`         ###查询全部的image id后然后全部删除

5. 容器的基础管理
5.1 运行容器
5.1.1 交互式的容器的运行:
[root@ora12c ~]# docker container run -it 2199b8eb8390          ###-it 表示交互式启动容器
[root@8f9027115cce /]#

[root@ora12c ~]# docker container ls                  ###显示正运行的容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8f9027115cce 2199b8eb8390 "/bin/bash" 8 minutes ago Up 8 minutes intelligent_chaum

解析:
CONTAINER ID : 容器的唯一号码(自动生成的)
NAMES : 容器的名字(可以自动,也可以手工指定)
STATUS : 容器的运行状态 ( Exited , Up)
[root@ora12c ~]# docker container run -it --name="docker-test01" 2199b8eb839            ###手工指定容器名方式

[root@ora12c ~]# docker container ls -a                              ###显示所有容器信息
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60589c457aaf 2199b8eb8390 "/bin/bash" 4 minutes ago Up 4 minutes quizzical_easley
cdf0c8747381 2199b8eb8390 "/bin/bash" 10 minutes ago Exited (0) 9 minutes ago docker-test01
8f9027115cce 2199b8eb8390 "/bin/bash" 23 minutes ago Exited (127) 8 minutes ago intelligent_chaum
e1f633881116 2199b8eb8390 "/bin/bash" 24 minutes ago Exited (0) 24 minutes ago affectionate_franklin

5.1.2 守护式容器的运行
[root@ora12c ~]# docker run -d --name="liuxc-nginx01" nginx:1.14                  ###-d 表示daemon ;当本地并无nginx1.14容器库时,会自动pull指定的Registry中的nignx1.14
Unable to find image 'nginx:1.14' locally
1.14: Pulling from library/nginx
27833a3ba0a5: Pull complete
0f23e58bd0b7: Pull complete
8ca774778e85: Pull complete
Digest: sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
Status: Downloaded newer image for nginx:1.14
35fea801b72950fc42781da5ee9346e97ac874af61c65992958f691fa3a9bea2

[root@ora12c ~]# docker container inspect liuxc-nginx01                       ###查询容器的详细信息
[
{
"Id": "35fea801b72950fc42781da5ee9346e97ac874af61c65992958f691fa3a9bea2",
"Created": "2020-09-19T02:29:59.112498528Z",
"Path": "nginx",
"Args": [
"-g",
"daemon off;"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 7048,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-09-19T02:29:59.996566437Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
......

"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",                                  ###自动创建的容器访问地址,目前宿主机可访问
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
}

-------------部分截取----------------------

[root@ora12c ~]# curl -I http://172.17.0.3/                            ###通过宿主机访问容器nignx
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sat, 19 Sep 2020 02:38:59 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: "5c0692e1-264"
Accept-Ranges: bytes

5.1.3 容器的应用场景
交互式的容器: 作为工具使用,如开发,测试,临时性的任务等场景下。
容器在临时任务中的使用,只存在一次或一段时间的测试、开发功能,完成后,容器无实用价值,故使用完后自动删除:
[root@docker ~]# docker container run -it --name="liuxc_cent76" --rm 9f38484d220f        ###后面--rm image id的方式设置一次性使用,完成后自动删除

守护式容器: 如提供网络服务
[root@docker /]# docker run -d -p 8080:80 --name="liuxc_nginx_80" nginx:1.14          ###-d 表示放在后台运行 ###将内部TCP的80端口映射到本地任何地址的8080端口,通过访问宿主机的8080端口,实现docker的80端口(nignx)对外提供访问
[root@ora12c ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f3e0496a02d nginx:1.14 "nginx -g 'daemon of…" 5 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp liuxc_nginx_80
35fea801b729 nginx:1.14 "nginx -g 'daemon of…" About an hour ago Up About an hour 80/tcp liuxc-nginx01
60589c457aaf 2199b8eb8390 "/bin/bash" 2 hours ago Up 5 minutes quizzical_easley
cdf0c8747381 2199b8eb8390 "/bin/bash" 2 hours ago Exited (0) 2 hours ago docker-test01
8f9027115cce 2199b8eb8390 "/bin/bash" 2 hours ago Exited (127) 2 hours ago intelligent_chaum
e1f633881116 2199b8eb8390 "/bin/bash" 2 hours ago Exited (0) 2 hours ago affectionate_franklin

[root@ora12c ~]# curl -I 192.168.217.71:8080                        ###注意是宿主机端口
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sat, 19 Sep 2020 04:03:50 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 04 Dec 2018 14:44:49 GMT
Connection: keep-alive
ETag: "5c0692e1-264"
Accept-Ranges: bytes

5.1.4 容器的启动、关闭、连接
交互式的容器的启动和关闭
[root@ora12c ~]# docker container start -i intelligent_chaum                  ###启动intelligent_chaum容器

[root@8f9027115cce /]#                                  ###启动并登录进了容器

[root@ora12c ~]# docker container stop intelligent_chaum                   ###关闭intelligent_chaum容器;比直接kill进程好(kill容易掉数据)
intelligent_chaum

守护式容器的启动和关闭
[root@docker /]# docker container stop liuxc_nginx_80
[root@docker /]# docker container start liuxc_nginx_80                    ###启动liuxc_nginx_80容器

容器的连接方法:
[root@ora12c ~]# docker container attach nervous_allen

采用子进程的方式登录(在已有工作容器中生成子进程,做登录.可以用于进行容器的调试,退出时也不会影响到当前容器)
[root@ora12c ~]# docker container exec -it nervous_allen /bin/bash

容器的后台及前台运行:
当交互式容器启动后,会进入到容器中,退出会关闭交互式容器。但如果完成操作后,又不想关闭容器。则需要将容器置于后台运行:
1. ctrl + p q                                        ###按住ctrl 先按P键,再按Q键
attach 调用到前台
示例:
[root@60589c457aaf /]# read escape sequence                        ###调入后台运行
[root@ora12c ~]#
[root@ora12c ~]#
[root@ora12c ~]# docker container attach quizzical_easley                  ###attach调用

2. 守护式容器制作时常用方法:
[root@ora12c ~]# docker container run --name="test_nignx01" 295c7be07902          ###未加-d 表示放在前台
WARNING: IPv4 forwarding is disabled. Networking will not work.

^C[root@ora12c ~]# ^C
[root@ora12c ~]# ^C
[root@ora12c ~]# docker container ls -a --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fd6feeba0ab47e71a7f11862dfb9dfcc20d189f9113ac2b3d4ed8e6c277baf36 295c7be07902 "nginx -g 'daemon off;'" 3 minutes ago Up 4 seconds 80/tcp test_nignx01
###nginx -g 'daemon off; 表示nginx容器启动时就直接夯在服务下。除非关闭。制作容器时,也应该注意将服务直接体现出来。

附删除容器的方法:
[root@ora12c ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f3e0496a02d nginx:1.14 "nginx -g 'daemon of…" 2 days ago Up 4 hours 0.0.0.0:8080->80/tcp liuxc_nginx_80
35fea801b729 nginx:1.14 "nginx -g 'daemon of…" 2 days ago Up 2 days 80/tcp liuxc-nginx01
60589c457aaf 2199b8eb8390 "/bin/bash" 2 days ago Up 2 days quizzical_easley
cdf0c8747381 2199b8eb8390 "/bin/bash" 2 days ago Up 2 days docker-test01
8f9027115cce 2199b8eb8390 "/bin/bash" 2 days ago Exited (137) 2 days ago intelligent_chaum
e1f633881116 2199b8eb8390 "/bin/bash" 2 days ago Exited (0) 2 days ago affectionate_franklin
[root@ora12c ~]# docker container rm affectionate_franklin ###删除单个容器
affectionate_franklin
[root@ora12c ~]# docker container rm intelligent_chaum
intelligent_chaum

[root@ora12c ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
44070e1b53db 2199b8eb8390 "sleep 100000" 57 seconds ago Up 56 seconds test001
7f3e0496a02d nginx:1.14 "nginx -g 'daemon of…" 2 days ago Up 4 hours 0.0.0.0:8080->80/tcp liuxc_nginx_80
35fea801b729 nginx:1.14 "nginx -g 'daemon of…" 2 days ago Up 2 days 80/tcp liuxc-nginx01
60589c457aaf 2199b8eb8390 "/bin/bash" 2 days ago Exited (0) 2 minutes ago quizzical_easley
cdf0c8747381 2199b8eb8390 "/bin/bash" 2 days ago Up 2 days docker-test01
[root@ora12c ~]# docker container rm -f `docker container ls -a -q` ###删除所有的容器
44070e1b53db
7f3e0496a02d
35fea801b729
cdf0c8747381
[root@ora12c ~]#
[root@ora12c ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@ora12c ~]#

另附Docker容器启动报“WARNING: IPv4 forwarding is disabled. Networking will not work”解决办法:
解决办法:
# vi /etc/sysctl.conf
或者
# vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
net.ipv4.ip_forward=1

重启network服务
# systemctl restart network

查看是否修改成功
# sysctl net.ipv4.ip_forward

如果返回为“ net.ipv4.ip_forward = 1 ”则表示成功

5.2 docker容器的网络访问
指定映射(docker 会自动添加一条iptables规则来实现端口映射),具体方法如下:
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort(随机端口范围:32768-60999)
-p hostPort:containerPort/udp
-p 81:80 –p 443:443 (多服务情况,-p 并列)
随机映射
docker run -p 80(随机映射端口)
[root@docker ~]# docker container run -d -p 8080:80 --name='n2' nginx:1.14 
[root@docker ~]# docker container run -d -p 10.0.0.100:8081:80 --name='n3' nginx:1.14 
[root@docker ~]# docker container run -d -p 80 --name='n5' nginx:1.14          ###将容器的80端口与宿主机任意随机端口进行映射,通过docker container ls -a 可以查询PORT映射情况
[root@docker ~]# docker container run -d -p 172.16.1.200::80 --name='n6' nginx:1.14

5.3容器的其他管理
docker ps -a -q === docker container ls -a -q
###-a 表示all所有;-q 表示container id号

外部调试工具top:查看某个容器的详细进程,如有子进程,包括子进程。
docker top ba9143bcaf74 === docker container top ba9143bcaf74
示例:
[root@ora12c ~]# docker top 87b41bb74d87
Error response from daemon: Container 87b41bb74d87a8d94201106c7b6f0db91a839b81f9b28a8c0f7e9cabc06d3d2e is not running
[root@ora12c ~]# docker top da76777a9970
UID PID PPID C STIME TTY TIME CMD
root 50410 50390 0 16:42 ? 00:00:00 nginx: master process nginx -g daemon off;
101 50444 50410 0 16:42 ? 00:00:00 nginx: worker process

查看日志:
[root@oldboy docker]# docker logs testxx
[root@oldboy docker]# docker logs -tf testxx           ###查看实时日志

[root@oldboy docker]# docker logs -t testxx
[root@oldboy docker]# docker logs -tf --tail 10 testxx
[root@oldboy docker]# docker logs -tf --tail 0 testxx

5.4 docker的数据卷实现持久化存储
容器启动后,由于其精简化特性,不能过多存储更多文件,根据需求可将需要的文档加入其中;注意nignx容器中的网页文档存放在/usr/share/nginx/html/目录下
1. 手工交互数据:
[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/html/          ###将宿主机文件拷到容器中
[root@docker opt]# docker container cp n1:/usr/share/nginx/html/50x.html ./           ###从容器中拷出文件到本地根目录下

示例:
启动一个名为“nginx_114”的nginx容器,然后将宿主机/data1/docker-files/html下的index.html和50x.html两个文件拷到nginx容器相应目录下,并查看内容
[root@ora12c ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
911b5cb84cc2 295c7be07902 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 0.0.0.0:90->80/tcp nginx_114

nginx容器中/usr/share/nginx/html下原有index.html和50x.html
root@911b5cb84cc2:/usr/share/nginx/html# ls -al
total 8
drwxr-xr-x 2 root root 40 Mar 26 2019 .
drwxr-xr-x 3 root root 18 Mar 26 2019 ..
-rw-r--r-- 1 root root 537 Dec 4 2018 50x.html                        ###原有文件时间信息
-rw-r--r-- 1 root root 612 Dec 4 2018 index.html                      ###原有文件时间信息

root@911b5cb84cc2:/usr/share/nginx/html# cat index.html
<!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>

将宿主机指定文件拷到容器中
[root@ora12c ~]# docker container cp /data1/docker-files/html/index.html nginx_114:/usr/share/nginx/html/
[root@ora12c ~]# docker container cp /data1/docker-files/html/50x.html nginx_114:/usr/share/nginx/html/

验证
root@911b5cb84cc2:/usr/share/nginx/html# ls -al
total 8
drwxr-xr-x 1 root root 40 Sep 22 07:17 .
drwxr-xr-x 1 root root 18 Mar 26 2019 ..
-rw-r--r-- 1 root root 32 Sep 22 06:57 50x.html                        ###拷贝后的文件时间信息
-rw-r--r-- 1 root root 39 Sep 22 06:56 index.html                      ###拷贝后的文件时间信息
[root@ora12c ~]# curl 192.168.217.71:90                        ###index.html内容已更新
welcome home!!!
nignx-web!!!
test0001

2. Volume实现宿主机和容器的数据共享
[root@docker opt]# mkdir -p /opt/html
[root@docker ~]# docker run -d --name="nginx_3" -p 83:80 -v /opt/html:/usr/share/nginx/html nginx        ###-v 表示在宿主机与容器之间文件建立映射关系

作用: 数据持久化
3. 示例: 开启两个nginx容器(90,91),同时挂载一台宿主机下某一数据卷(文件),实现静态资源共享
查看容器数据卷挂载路径:
docker container inspect vol3

mounts下

4. 数据卷容器:
(1)宿主机模拟数据目录
mkdir -p /opt/Volume/a
mkdir -p /opt/Volume/b
touch /opt/Volume/a/a.txt
touch /opt/Volume/b/b.txt

(2)制作并启动数据卷容器
docker run -it --name "nginx_volumes" -v /opt/Volume/a:/opt/a -v /opt/Volume/b:/opt/b centos:6.9 /bin/bash
ctrl p q
解析:
/opt/Volume/a、b为宿主机目录文件
/opt/a、b为数据卷容器下的目录文件

(3)使用数据卷容器
docker run -d -p 8085:80 --volumes-from nginx_volumes --name "n8085" nginx          ###--volumes-from 设置数据卷容器,后面跟数据卷容器名
docker run -d -p 8086:80 --volumes-from nginx_volumes --name "n8086" nginx
作用: 在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数卷容器进行统一管理

示例:
制作数据卷容器volumes,将其放置后台运行,并把宿主机/data1/docker-files/volume下a、b、c文件夹下的文件分别放置到数据卷容器的/opt/a/、/opt/b/、/opt/c/目录下;然后挂载至n9090和n9091的两个nginx容器对应位置下
步骤:
docker container run -it --name="volumes" -v /data1/docker-files/volume/a:/opt/a -v /data1/docker-files/volume/b:/opt/b -v /data1/docker-files/volume/c:/opt/c centos:6.9 /bin/bash
ctrl p q

[root@ora12c ~]# docker run -d -p 9090:80 --volumes-from volumes --name="n9090" nginx:1.14
49aca7c266c28998c5fa2867537e4bda468affa60b017bc64fc4cfa3ed703c88
[root@ora12c ~]# docker run -d -p 9091:80 --volumes-from volumes --name="n9091" nginx:1.14
a4cce47958024d6d8746ecdc525b26378a9c0da287d327e69610024f07d9c04

验证
[root@ora12c ~]# docker container exec -it n9091 /bin/bash
root@a4cce4795802:/# cd opt/
root@a4cce4795802:/opt# ls
a b c
root@a4cce4795802:/opt# cd a
root@a4cce4795802:/opt/a# ls
a.txt
root@a4cce4795802:/opt/a# cat a.txt
aaaaaaaaaaa
aaaaaaaaaaa
aaaaaaaaa!!

[root@ora12c ~]# docker exec -it n9090 /bin/bash
root@49aca7c266c2:/#
root@49aca7c266c2:/# cd opt/c/
root@49aca7c266c2:/opt/c# ls
c.txt
root@49aca7c266c2:/opt/c# cat c.txt
ccccccc!!
cccccc!!
ccccc!!

---Docker学习随笔---基础管理部分---的更多相关文章

  1. docker学习(1)--基础概念

    转载请注明源文章出处:http://www.cnblogs.com/lighten/p/6841677.html 1.前言 docker的官网:这里.下一段摘自官网描述. docker是世界领先的软件 ...

  2. docker学习(2)--基础命令

    转载请注明源出处:http://www.cnblogs.com/lighten/p/6875355.html 1.基本命令 搭建好docker环境之后,使用docker help命令查看docker的 ...

  3. Docker学习--Linux基础准备篇

    1.docker命令不需要附带敲sudo的解决办法 由于docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户,所以其他用 ...

  4. Docker 学习记录(基础命令)

    1. 获取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]  ===>   docker pull ubuntu:16:04 2.运 ...

  5. linux 学习随笔-磁盘管理

    1:df 用于查看已挂载磁盘的容量信息 -i 查看inodes使用情况 -h 以合适的单位显示 -k -m 分别以k M单位显示 2:du 查看某个文件或者目录占用的空间 du [-abckmsh] ...

  6. linux 学习随笔-文件目录管理

    1:绝对路径:写法一般由'/'根目录引起的 '/'表示根目录 2:相对路径:不是由'/'引起的  需要先进入/ 在进入其它文件 3:mkdir -p  +目录+文件夹 可以用于创建不存在的级联目录 不 ...

  7. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

  8. Docker容器学习梳理 - 基础知识(1)

    Docker是PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源.Docker是通过内核虚拟化技 ...

  9. Docker学习笔记之运行和管理容器

    0x00 概述 容器是基于容器技术所建立和运行的轻量级应用运行环境,它是 Docker 封装和管理应用程序或微服务的“集装箱”.在 Docker 中,容器算是最核心的部分了,掌握容器的操作也是 Doc ...

随机推荐

  1. tomcat与springmvc 结合 之---第19篇 springmvc 加载.xml文件的bean 过程

    writedby 张艳涛,看springmvc 的源码太难了,怎么办, 这篇文章主要分析了看透springmvc的第9章结尾的 如何解析xml 命名空间标签 <?xml version=&quo ...

  2. Apache ActiveMQ(cve-2015-5254)

    影响版本 Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞 复现 使用工具执行命令 工具地址 https://github.com/matthiaskaiser/jmet/re ...

  3. 🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(3)Jenkinsfile+DockerFile实现自动部署

    每日一句 没有人会因学问而成为智者.学问或许能由勤奋得来,而机智与智慧却有懒于天赋. 前提概要 Jenkins下用DockerFile自动部署Java项目,项目的部署放心推向容器化时代机制. 本节需要 ...

  4. TypeScript学习笔记(三)泛型、模块化和命名空间

    目录 一.泛型 1. 泛型函数 2. 泛型类 3. 泛型接口 写法一 写法二 两种写法的区别 二.模块化 1. export写法一 2. export写法二 3. 为引入的方法或变量起别名 4. ex ...

  5. C++ 1//设计立方体类 //创建立方体的类 //设计属性和行为 //获取立方体的面积和体积 //分别利用(全局函数 和 成员函数)判断俩个立方体是否相等

    1 //设计立方体类 2 //创建立方体的类 3 //设计属性和行为 4 //获取立方体的面积和体积 5 //分别利用(全局函数 和 成员函数)判断俩个立方体是否相等 6 #include <i ...

  6. ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理

    ABP框架的数据访问底层是基于EFCore(Entity Framework Core)的,是微软标志性且成熟的ORM,因此它本身是支持多种主流数据库MySQL,SqlServer,Oracle,SQ ...

  7. html 去除重复边框

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...

  8. Golang语言系列-05-数组和切片

    数组和切片 数组 概念 数组是同一种数据类型元素的集合:数组的长度必须是常量,并且长度是数组类型的一部分,一旦定义,长度不能变 例如:[5]int 和 [10]int 是不同的数组类型 使用时可以修改 ...

  9. MySQL-01-简介以及安装

    Mysql简介 什么是数据 数据:文字.图片.视频... 人类认知的数据表现方式 计算机:二进制.16进制的机器语言 基于数据的重要性和复杂性的不同,我们可能有不同的管理方式 哪些数据是适合存储到数据 ...

  10. Redis雪崩和Redis穿透

    Redis雪崩:查询时Redis没有数据 本来先从Redis里面查某个数据 但是Redis中这个数据刚好被删除了,还没来得及更新 一瞬间很多请求直接进入了Mysql进行查询 而mysql承受不了太大压 ...