查看 Docker 的版本信息
[root@docker ~]# docker version
Client: Docker Engine - Community
Version: 19.03.4
API version: 1.40
Go version: go1.12.10
Git commit: 9013bf583a
Built: Fri Oct 18 15:52:22 2019
OS/Arch: linux/amd64
Experimental: falseServer: Docker Engine - Community
Engine:
Version: 19.03.8
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: afacb8b
Built: Wed Mar 11 01:25:42 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
查看 docker 的详细信息
[root@docker ~]# docker info
Client:
Debug Mode: falseServer:
Containers: 3
Running: 2
Paused: 0
Stopped: 1
Images: 3
Server Version: 19.03.8
Storage Driver: overlay2
Backing Filesystem: <unknown>
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: b34a5c8af56e510852c35414db4c1f4fa6172339
runc version: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-862.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.936GiB
Name: docker
ID: 4Q5Z:EBZC:TQEF:UY3U:GH4W:RHHS:RTSZ:X6QM:7PGN:6EIK:BLAF:5TPB
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://xc1orh81.mirror.aliyuncs.com/
Live Restore Enabled: falseWARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
Docker镜像操作
1、搜索镜像
Docker 运行容器前需要本地存在对应的镜像,如果不存在本地镜像,Docker 就会尝试从默认镜像仓库 https://hub.docker.com 下载,这是由 Docker 官方维护的一个公共仓库,可以满足用户的绝大部分需求,用户也可以通过配置来使用自定义的镜像仓库。
docker search //从 Docker Hub 搜索镜像
命令格式:docker search 关键字
参数:
--automated=false 仅显示自动创建的镜像
--no-trunc=false 输出信息截断显示
-s,--stars=0 指定仅显示评价为指定星级以上的镜像
[root@docker ~]# docker search dhcp
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
networkboot/dhcpd Suitable for running a DHCP server for your ... 46 [OK]
joebiellik/dhcpd DHCP server running on Alpine Linux 16 [OK]
gns3/dhcp A DHCP container for GNS3 using dnsmasq 3 [OK]
instantlinux/dhcpd-dns-pxe Serve DNS, DHCP and TFTP from a small Alpine… 2 [OK]
modularitycontainers/dhcp-server ISC DHCP server 2 [OK]
ictu/dhcpd-tftpd dhcpd tftpd container 1 [OK]
mobylinux/dhcp-client 1
njd90/dhcpd6 This Docker image is suitable for running a … 1 [OK]
marcelwiget/dhcptester Simple dhcp client simulator for untagged, s… 1
onesourceintegrations/dhcp 0
mellanox/dhcp-cni K8s dhcp cni plugin 0
kramergroup/dhcpmanager-apiserver 0
kramergroup/dhcpmanager-controller 0
modularitycontainers/dhcp-client DHCP client 0 [OK]
linuxkit/dhcpcd LinuxKit dhcpcd package 0
wastrachan/dhcpd ISC DHCP Server in a Docker container, with … 0
babim/dhcpd dhcpd on Alpine Linux 0 [OK]
crazymanjinn/dhcpd alpine dhcpd 0 [OK]
pnnlmiscscripts/dhcpd 0
feduxorg/dhcpd ICS DHCP Daemon Image 0
biomedia/dhcp-structural-pipeline The dHCP structural pipeline performs struct… 0
kosdk/dhcpd ISC DHCP Server Container. 0
fouadchamoun/dhcp-helper Lightweight DHCP Relay 0
engines/dhcpd 0
hanlon/dhcproxy dhcproxy augments local unmodified dhcp serv… 0 [OK]
[root@docker ~]# docker search -s 10 dhcp
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
networkboot/dhcpd Suitable for running a DHCP server for your … 46 [OK]
joebiellik/dhcpd DHCP server running on Alpine Linux 16 [OK]
返回很多包含 dhcp 关键字的镜像,其中返回信息包括镜像名称(NAME)、描述(DESCRIPTION)、星级(STARS)、是否官方创建(OFFICIAL)、是否主动创建(AUTOMATED)。默认的输出结果会按照星级评价进行排序,表示该镜像的受欢迎度。在下载镜像时,可以参考这一项,在搜索时还可以使用 -s 或者 -stars=x 显示指定星级以上的镜像,x 为任意数。星级越高表示越受欢迎;是否为官方镜像一项是指是否是由官方项目组创建和维护的镜像,一般官方项目组维护的镜像单个单词作为镜像名称。我们称为基础镜像或者根镜像。像 reinblau/dhcp 这种命名方式的镜像,表示是由 Docker Hub 的用户 reinblau 创建并维护的镜像,带有用户名为前缀;是否主动创建资源则是指是否允许用户验证镜像的来源和内容。
使用 docker search 命令只能查找镜像,镜像的标签无法查找,因此如果需要查找 docker 标签,需要从网页上访问镜像仓库 https://hub.docker.com 进行查找。
2、获取镜像
搜索到符合需求的镜像,可以使用 docker pull 命令从网络下载镜像到本地使用。
命令格式:docker pull 仓库名称[:标签]
对于 Docker 镜像来说,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest,也可以通过指定的标签来下载特定版本的某一镜像。这里标签就是用来区分镜像版本的。
[root@docker ~]# docker pull docker.io/nginx
Using default tag: latest
latest: Pulling from library/nginx
c499e6d256d6: Pull complete
74cda408e262: Pull complete
ffadbd415ab7: Pull complete
Digest: sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
从整个下载的过程可以看出,镜像文件由若干层(Layer)组成,我们称为 AUFS(联合文件系统),是实现增量保存于更新的基础,下载过程中会输出镜像的各层信息。镜像下载到本地之后就可以随时使用该镜像了。
用户也可以选择从其他注册服务器仓库下载,这时需要在仓库名称前指定完整的仓库注册服务器地址。
3、查看镜像信息
使用 docker images 命令查看下载到本地的所有镜像。
命令格式:docker images 仓库名称[:标签]
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 3 days ago 127MB
nginx <none> 540a289bab6c 5 months ago 126MB
docker images nginx 查看某一类镜像
从回显的信息看:
REPOSITORY 镜像所属仓库
TAG 镜像的标签信息
IMAGE ID 镜像的唯一 ID
CREATED 镜像创建时间
SIZE 镜像大小
4、获取镜像的详细信息
命令格式:docker inspect 镜像ID
[root@docker ~]# docker inspect ed21b7a8aee9
[
{
"Id": "sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596"
],
"Parent": "",
"Comment": "",
"Created": "2020-03-31T03:19:30.487069362Z",
"Container": "5c86b143cf5caec0aed5c331922c243f00600152ec0e9ecbe8531771562e72b8",
"ContainerConfig": {
"Hostname": "5c86b143cf5c",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.17.9",
"NJS_VERSION=0.3.9",
"PKG_RELEASE=1~buster"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD ["nginx" "-g" "daemon off;"]"
],
"ArgsEscaped": true,
"Image": "sha256:9be1fc3b00d81a66f4de11f5f5bf176e0748434be056cf3152386cc917307e7f",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGTERM"
},
"DockerVersion": "18.09.7",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.17.9",
"NJS_VERSION=0.3.9",
"PKG_RELEASE=1~buster"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "sha256:9be1fc3b00d81a66f4de11f5f5bf176e0748434be056cf3152386cc917307e7f",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGTERM"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 126769107,
"VirtualSize": 126769107,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/1fbda13bf61c46e7a174079d3d43cb09488c7606718256d4303c9c7dabc9dc8d/diff:/var/lib/docker/overlay2/76b95173415a45153616dab4ceeb104b4a85d1db21b97e50d78a8da53d6acdbb/diff",
"MergedDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/merged",
"UpperDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/diff",
"WorkDir": "/var/lib/docker/overlay2/a653aa12c9c8567946f67198374c1f3ee71b798cbee0c18de06563152a29a8ad/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45",
"sha256:99134ec7f247e5a211c7205fec587bf72a6d4aac339b21858b892e9c04f78920",
"sha256:d37eecb5b7691ec21bd19989e37f8bb4d20b340a775591d0f3db5897d606b0e4"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
镜像的详细信息中包括创建时间、系统版本、主机名、域名、用户、卷、标签、操作系统、设备ID等各种信息。
5、为镜像添加新的标签
命令格式: docker tag 名称[:标签] 新名称[:标签]
[root@docker ~]# docker tag nginx nginx:nginx
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ed21b7a8aee9 3 days ago 127MB
nginx nginx ed21b7a8aee9 3 days ago 127MB
nginx <none> 540a289bab6c 5 months ago 126MB
6、删除镜像
使用 docker rmi 命令可以删除多余的镜像
删除镜像的操作有两种方法:使用镜像的标签删除镜像;使用镜像的ID删除镜像。
命令格式
docker rmi 仓库名称[:标签]
docker rmi 镜像ID
[root@docker ~]# docker rmi nginx:nginx
Untagged: nginx:nginx
Untagged: nginx@sha256:282530fcb7cd19f3848c7b611043f82ae4be3781cb00105a1d593d7e6286b596
Deleted: sha256:ed21b7a8aee9cc677df6d7f38a641fa0e3c05f65592c592c9f28c42b3dd89291
Deleted: sha256:8a305f371a6c3c445a1dfc500c1364743868a269ab8cdaf95902692e82168352
Deleted: sha256:d079ef06ec1f10a8050887365f9a940b39547ba6bcc46b16a463e740984f3223
Deleted: sha256:c3a984abe8a88059915bb6c7a1d249fd1ccc16d931334ac8816540b0eb686b45
当一个镜像有多个标签的时候,docker rmi 命令只是删除该镜像多个标签中的指定标签,不会影响镜像文件,相当于只是删除了镜像的一个标签而已,但该镜像只剩下一个标签的时候就要小心了,再使用删除命令就会彻底删除该镜像。
例如:上面的操作删除 nginx:nginx 镜像时,可以看出删除了整个镜像文件的所有层。
当使用 docker rmi 命令后面跟上镜像的ID号时,必须保证该镜像没有被容器使用才能进行,删除时系统会先删除所有指向该镜像的标签,然后删除该镜像文件本身。如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
[root@docker ~]# docker rmi 540a289bab6c
Error response from daemon: conflict: unable to delete 540a289bab6c (must be forced) - image is being used by stopped container 17d9ccf1815c[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17d9ccf1815c 540a289bab6c "nginx -g 'daemon of…" 4 months ago Exited (0) 4 months ago dreamy_moser
fe6168054c36 540a289bab6c "/bin/bash" 4 months ago Exited (0) 4 months ago gallant_khayyam
3756a7fe77be 540a289bab6c "/bin/bash" 4 months ago Exited (0) 4 months ago suspicious_kare
7、存出镜像和载入镜像
当需要把一台机器上的镜像迁移到另一台机器上的时候,需要将镜像保存成本地文件,这一个过程叫做存出镜像,可以使用 docker save 命令进行存出操作。之后就可以复制该文件到其他机器。
命令格式: docker save -o 存出镜像为本地文件
[root@docker ~]# docker save -o nginx-latest.tar nginx:latest
[root@docker ~]# ls
anaconda-ks.cfg git-2.22.0.tar.gz git_data.git nginx-latest.tar
将存出的镜像从 A 机器拷贝到 B 机器,需要在 B 机器上使用该镜像,就可以将该导出文件导入到 B 机器的镜像库中,这一过程叫做载入镜像。使用 docker load 或者 docker --input 进行载入操作。
命令格式:docker load < 存出的文件 或者 docker load --input 存出的文件
[root@docker ~]# docker load < nginx-latest.tar
c3a984abe8a8: Loading layer 72.48MB/72.48MB
99134ec7f247: Loading layer 58.11MB/58.11MB
d37eecb5b769: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest[root@docker ~]# docker load --input nging-latest.tar
c3a984abe8a8: Loading layer 72.48MB/72.48MB
99134ec7f247: Loading layer 58.11MB/58.11MB
d37eecb5b769: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest
8、上传镜像
本地存储的镜像越来越多,就需要指定一个专门存放这些镜像的地方——仓库。目前比较方便的就是公共仓库,默认上传到 Docker Hub 官方仓库,需要注册使用公共仓库的账号,可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。在上传镜像之前,需要对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
命令格式:docker push 仓库名称:标签
例如:在公共仓库上已经注册成功了一个账号,这个账号叫做 wxl2567
Docker 容器操作
1、创建容器与运行容器
Docker 的创建就是将镜像加载到容器的过程,Docker 的容器十分轻量级,用户可以随时创建或者删除。新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器,这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全停止。停止的容器可以重新启动并保留原来的修改。可以使用 docker create 命令新建一个容器。
命令格式:docker create [选项]... 镜像 运行的程序
常用选项:
-i 让容器的输入保持打开
-t 让 Docker 分配一个伪终端
-d 守护进程形式运行(后台运行)
-p 端口映射(让容器的端口与宿主机的端口关联)
-v 目录映射(两个目录内容相同,就相当于一个)
[root@docker ~]# docker create -it nginx:latest /bin/bash
458b25c30f49fdb27aee14b32d10bc687d9f1dc977174f5b7c19fef7445dbb44
注意:如果创建容器命令报错 "WARNING:IPv4 forwarding is disabled.Networking will not work.",就使用 vim 编辑器 打开 /etc/sysctl.conf 文件,在其中添加 net.ipv4.ip_forward=1,然后使用 sysctl -p 命令加载配置
[root@docker ~]# head -1 /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@docker ~]# sysctl -p
使用 docker create 命令创建新容器后会返回一个唯一的ID。
可以使用 docker ps 命令来查看运行的所有容器的运行状态。添加 -a 选项可以列出系统中所有容器状态。-q 只查看容器ID。
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
458b25c30f49 nginx:latest "/bin/bash" 23 minutes ago Up 7 minutes 80/tcp unruffled_austin
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b96b84b428a nginx:latest "/bin/bash" 27 seconds ago Created happy_greider
458b25c30f49 nginx:latest "/bin/bash" 23 minutes ago Up 8 minutes 80/tcp u nruffled_austin
输出信息显示容器的ID号、加载的镜像、运行的程序、创建时间、目前所处的状态、端口映射。其中状态一栏为空表示当前的容器处于停止状态。
2、容器的启动与停止
启动、停止、重启容器可以使用 docker start/stop/restart 命令
命令格式:docker start/stop/restart 容器的ID/名称
[root@docker ~]# docker start 0b96b84b428a
0b96b84b428a
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b96b84b428a nginx:latest "/bin/bash" 10 minutes ago Up 4 seconds 80/tcp happy_greider
458b25c30f49 nginx:latest "/bin/bash" 33 minutes ago Up 17 minutes 80/tcp unruffled_austin
容器启动后,可以看到容器状态一栏已经变为 UP,表示容器已经处于启动状态。如果用户想创建并启动容器,可以直接执行 docker run 命令,等同于先执行 docker create 命令,再执行 docker start 命令。需要注意只要后面的命令运行结束,容器就会停止。
当利用 docker run 来创建容器时,Docker 在后台的标准运行过程是这样的:检查本地是否存在指定的镜像,当镜像不存在时,会从公有仓库下载;利用镜像创建并启动一个容器;分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;从宿主机配置的网桥接口中桥接一个虚拟机接口到容器中;分配一个地址池中的 IP 地址给容器;执行用户指定的应用程序;执行完毕后容器被终止运行。
例如,创建容器并启动执行一条 shell 命令
[root@docker ~]# docker run nginx:latest /bin/bash -c ls /
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
这和在本地直接执行命令几乎没有区别。
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
669cb558a88d nginx:latest "/bin/bash -c ls" 3 minutes ago Exited (0) 3 minutes ago thirsty_lamarr
0b96b84b428a nginx:latest "/bin/bash" 3 hours ago Up 3 hours 80/tcp happy_greider
458b25c30f49 nginx:latest "/bin/bash" 3 hours ago Up 3 hours 80/tcp unruffled_austin
查看容器的运行状态,可以看出容器在执行完 "/usr/bin/bash -c ls / " 命令之后就停止了。
有时候需要在后台持续的运行这个容器,就需要让 docker 容器在守护进程形式运行。可以在 docker
run 命令之后添加 -d 选项来实现。但是需要注意容器所运行的程序不能结束。
例如,下面的容器会持续在后台运行。
[root@docker ~]# docker run -d nginx:latest /bin/bash -c "while true;do
echo hello;done"
880a20a3c1071182d25f8c3a9ffd89dcbdd35020ce8c7361327c1e1cb1ef2264[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
880a20a3c107 nginx:latest "/bin/bash -c 'while…" 38 seconds ago Up 37 seconds 80/tcp gallant_greider
0b96b84b428a nginx:latest "/bin/bash" 3 hours ago Up 3 hours 80/tcp happy_greider
458b25c30f49 nginx:latest "/bin/bash" 3 hours ago Up 3 hours 80/tcp unruffled_austin
查看容器内的输出
[root@docker ~]# docker logs 880
3、容器的进入
需要进入容器进行相应操作时,可以使用 docker exec 命令或者 docker attach 命令进入运行着的容器。
命令格式: docker exec -it 容器ID/名称 /bin/bash
其中 -i 选项表示让容器的输入保持打开;
-t 选项表示让 docker 分配一个伪终端。
例如:进入正在运行着的容器
[root@docker ~]# docker exec -it 0b /bin/bash
root@0b96b84b428a:/#
用户可以通过所创建的终端来输入命令,通过 exit 命令退出容器。容器关闭
root@0b96b84b428a:/# exit
exit
通过 Ctrl +p q 命令退出容器并保证容器在后台继续运行。容器继续运行
[root@docker ~]# docker attach 0b
root@0b96b84b428a:/#
4、容器的导出与导入
用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,首先需要将已经创建好的容器导出为文件,可以使用 docker export 命令实现,无论这个容器是处于运行状态还是停止状态均可导出。导出之后可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。
命令格式:docker export 容器ID/名称 > 文件名
例如,
[root@docker ~]# docker export 0b > nginx.tar
[root@docker ~]# ls
anaconda-ks.cfg git_data.git nginx.tar
git-2.22.0.tar.gz nging-latest.tar
导出的文件从 A 机器拷贝到 B 机器,之后使用 docker import 命令导入,成为镜像。
命令格式:cat 文件名 | docker import - 生成的镜像名称:标签
例如,
[root@docker ~]# cat nginx.tar | docker import - nginx:test
sha256:156b4f039e228995f4c5accc13b345529047aeb3d442b170018ce07ac239c89e
[root@docker ~]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx test 156b4f039e22 21 seconds ago 125MB
nginx latest ed21b7a8aee9 3 days ago 127MB
nginx <none> 540a289bab6c 5 months ago 126MB
5、容器的删除
docker start | stop | restart | kill // 运行已停止的容器 | 停止一个正在运行的容器 | 重启 一个容器 | 杀死一个正在运行的容器
可以使用 docker rm 命令将一个已经终止状态的容器进行删除。
命令格式:docker rm 容器ID / 名称
例如,
[root@docker ~]# docker rm 880a20a3c107
880a20a3c107
如果删除一个正在运行的容器,可以添加 -f 选项 强制删除,但是建议先将容器停止再做删除操作。
Docker 默认的存储目录在 /var/lib/docker,Docker 的镜像、容器、日志等内容全部都存储在此,可以单独使用大容量的分区来存储这些东西,并且一般选择建立 LVM 逻辑卷。从而避免 Docker 运行过程中存储目录容量不足。
6、文件复制
将主机 /root/anaconda-ks.cfg 目录拷贝到容器 0b96b84b428a 的 /tmp 目录下。
[root@docker ~]# docker cp /root/anaconda-ks.cfg 0b96b84b428a:/tmp
[root@docker ~]# docker attach 0b96b84b428a
root@0b96b84b428a:/# ls /tmp
anaconda-ks.cfg
root@0b96b84b428a:/#
创建私有仓库
仓库(Repository)是集中存放镜像的地方。
注册服务器才是存放仓库具体的服务器(Registry),每个服务器上都可以放置多个仓库,而每个仓库下可以放置多个镜像,每个镜像上可以运行多个容器,每个容器上可以跑一个应用或应用组。
仓库自身可以分为:公共仓库和私有仓库。
比如公有仓库:http://hub.docker.com 或国内的:dl.dockerpool.com
安装 docker 后,可以通过官方提供的 registry 镜像来简单搭建一套本地仓库环境
[root@docker ~]# mkdir -pv /opt/data/registry
mkdir: 已创建目录 "/opt/data"
mkdir: 已创建目录 "/opt/data/registry"[root@docker ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
486039affc0a: Pull complete
ba51a3b098e6: Pull complete
8bb4c43d6c8e: Pull complete
6f5f453e5f2d: Pull complete
42bc10b72f42: Pull complete
Digest: sha256:7d081088e4bfd632a88e3f3bcd9e007ef44a796fddfe3261407a3f9f04abe1e7
Status: Downloaded newer image for registry:latest
138093f2fe8a11590e875dd2371f092776618d8e19a6cd60495eb4377e73c10a[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
138093f2fe8a registry "/entrypoint.sh /etc…" About a minute ago Up About a minute 0.0.0.0:5000->5000/tcp laughing_shamir
669cb558a88d nginx:latest "/bin/bash -c ls" 3 hours ago Exited (0) 3 hours ago thirsty_lamarr
0b96b84b428a nginx:latest "/bin/bash" 5 hours ago Up 5 hours 80/tcp happy_greider
458b25c30f49 nginx:latest "/bin/bash" 6 hours ago Up 6 hours 80/tcp unruffled_austin[root@docker ~]# vim /usr/lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 后添加 --insecure-registry 192.168.200.123:5000(注册服务器IP地址:5000)
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
138093f2fe8a registry "/entrypoint.sh /etc…" 15 minutes ago Exited (2) 8 seconds ago laughing_shamir
669cb558a88d nginx:latest "/bin/bash -c ls" 3 hours ago Exited (0) 3 hours ago thirsty_lamarr
0b96b84b428a nginx:latest "/bin/bash" 6 hours ago Exited (0) 8 seconds ago happy_greider
458b25c30f49 nginx:latest "/bin/bash" 6 hours ago Exited (0) 8 seconds ago unruffled_austin[root@docker ~]# docker start 138093f2fe8a
138093f2fe8a
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
138093f2fe8a registry "/entrypoint.sh /etc…" 20 minutes ago Up 20 seconds 0.0.0.0:5000->5000/tcp laughing_shamir
669cb558a88d nginx:latest "/bin/bash -c ls" 3 hours ago Exited (0) 3 hours ago thirsty_lamarr
0b96b84b428a nginx:latest "/bin/bash" 6 hours ago Exited (0) 4 minutes ago happy_greider
458b25c30f49 nginx:latest "/bin/bash" 6 hours ago Exited (0) 4 minutes ago unruffled_austin[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx test 156b4f039e22 About an hour ago 125MB
nginx latest ed21b7a8aee9 3 days ago 127MB
registry latest 708bc6af7e5e 2 months ago 25.8MB
nginx <none> 540a289bab6c 5 months ago 126MB
[root@docker ~]# docker tag nginx:latest 192.168.200.123:5000/nginx:latest
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx test 156b4f039e22 About an hour ago 125MB
192.168.200.123:5000/nginx latest ed21b7a8aee9 3 days ago 127MB
nginx latest ed21b7a8aee9 3 days ago 127MB
registry latest 708bc6af7e5e 2 months ago 25.8MB
nginx <none> 540a289bab6c 5 months ago 126MB[root@docker ~]# docker push 192.168.200.123:5000/nginx:latest
The push refers to repository [192.168.200.123:5000/nginx]
d37eecb5b769: Pushed
99134ec7f247: Pushed
c3a984abe8a8: Pushed
latest: digest: sha256:7ac7819e1523911399b798309025935a9968b277d86d50e5255465d6592c0266 size: 948