赞
踩
首选需要大家搭建好Docker环境,没有环境的可以查看前面的详细讲解安装Docker引擎的文章(在CentOS上安装Docker引擎_征服bug的博客-CSDN博客)
首先是安装好Docker 引擎
目录
- #启动docker
- systemctl start docker
- #停止docker
- systemctl stop docker
- #重启docker
- systemctl restart docker
- #查看docker状态
- systemctl status docker
- #查看docker概要信息
- docker info
- #查看docker帮助文档
- docker –help
- #安装校验
- docker -v #docker的版本号
- docker version #docker的详细信息
配置镜像加速
可以通过配置国内镜像源的方式,从国内获取镜像,提高拉取速度。这里介绍中国科学技术大学 (LUG@USTC)的开源镜像:https://docker.mirrors.ustc.edu.cn 和网易的开源镜像:http://hub-mir ror.c.163.com
1.编辑文件 daemon.json
- mkdir -p /etc/docker
- vi /etc/docker/daemon.json
2.在文件中输入以下内容并保存
- {
- "registry-mirrors": ["http://hub-mirror.c.163.com",
- "https://docker.mirrors.ustc.edu.cn"]
- }
3.重新加载配置信息及重启 Docker 服务
- # 重新加载某个服务的配置文件
- systemctl daemon-reload
- # 重新启动
- docker sudo systemctl restart docker
拉取hello-world镜像的流程
docker run hello-world 命令执行流程图如下。
1.查看镜像
- [root@localhost ~]# systemctl start docker
- [root@localhost ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- mysql 5.7 eef0fab001e8 3 weeks ago 495MB
- hello-world latest feb5d9fea6a5 14 months ago 13.3kB
- centos 7 eeb6ee3f44bd 14 months ago 204MB
REPOSITORY :镜像在仓库中的名称,本文中以后都简称镜像名称
TAG :镜像标签
IMAGE ID :镜像
ID CREATED :镜像的创建日期(不是获取该镜像的日期)
SIZE :镜像大小
注:这些镜像都是存储在 Docker 宿主机的 /var/lib/docker 目录下。
2.搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索。
格式:docker search 镜像名称
- [root@localhost ~]# docker search mysql
- NAME DESCRIPTION STARS OFFICIAL AUTOMATED
- mysql MySQL is a widely used, open-source relation… 13533 [OK]
- mariadb MariaDB Server is a high performing open sou… 5163 [OK]
- phpmyadmin phpMyAdmin - A web interface for MySQL and M… 699 [OK]
- percona Percona Server is a fork of the MySQL relati… 595 [OK]
- bitnami/mysql Bitnami MySQL Docker Image 79 [OK]
- databack/mysql-backup Back up mysql databases to... anywhere! 76
- linuxserver/mysql-workbench 45
- ubuntu/mysql MySQL open source fast, stable, multi-thread… 38
- linuxserver/mysql A Mysql container, brought to you by LinuxSe… 38
- circleci/mysql MySQL is a widely used, open-source relation… 28
- google/mysql MySQL server for Google Compute Engine 22 [OK]
- rapidfort/mysql RapidFort optimized, hardened image for MySQL 13
- bitnami/mysqld-exporter 4
- ibmcom/mysql-s390x Docker image for mysql-s390x 2
- vitess/mysqlctld vitess/mysqlctld 1 [OK]
- newrelic/mysql-plugin New Relic Plugin for monitoring MySQL databa… 1 [OK]
- hashicorp/mysql-portworx-demo 0
- rapidfort/mysql-official RapidFort optimized, hardened image for MySQ… 0
- docksal/mysql MySQL service images for Docksal - https://d… 0
- mirantis/mysql 0
- rapidfort/mysql8-ib RapidFort optimized, hardened image for MySQ… 0
- cimg/mysql 0
- drud/mysql 0
- silintl/mysql-backup-restore Simple docker image to perform mysql backups… 0 [OK]
- corpusops/mysql https://github.com/corpusops/docker-images/ 0
NAME :镜像名称
DESCRIPTION :镜像描述
STARS :用户评价,反应一个镜像的受欢迎程度
OFFICIAL :是否为官方构建
AUTOMATED :自动构建,表示该镜像由
Docker Hub 自动构建流程创建的。
3.拉取镜像
拉取镜像就是从中央仓库下载镜像到本地。
格式:docker pull 镜像名称
通过查看 tag 信息,如果我们要下载 centos8的镜像。
- [root@localhost ~]# docker pull centos:8
- 8: Pulling from library/centos
- a1d0c7532777: Pull complete
- Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
- Status: Downloaded newer image for centos:8
- docker.io/library/centos:8
4.删除镜像
# 删除单个镜像
docker rmi 镜像ID
# 删除多个镜像
docker rmi 镜像ID 镜像ID 镜像ID
注:docker images -q 可以查询到所有镜像的 ID,通过组合命令可以实现删除所有镜像的操作。
docker rmi `docker images -q`
注意:如果通过某个镜像创建了容器,则该镜像无法删除。
解决办法:先删除镜像中的容器,再删除该镜像。
1.查看容器
查看正在运行的容器。
- [root@localhost ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
字段说明:
CONTAINER ID :容器 ID
IMAGE :所属镜像
COMMAND :
CREATED :创建时间
STATUS :容器状态
PORTS :端口
NAMES :容器名称
2.查看停止的容器
docker ps -f status=exited
3.查看所有容器(包括运行和停止)。
docker ps -a
4.查看容器的ID
docker ps -q
5.查看最后一次运行的容器。
docker ps -l
6.列出最近创建的 n 个容器。
docker ps -n 5
7.查看docker内容器的运行状态
docker stats
格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 选项:
-
- -i :表示运行容器;
-
- -t :表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪 终端;
-
- --name :为创建的容器命名;
-
- -v :表示目录映射关系(前者是宿主机目录,后者是映射到容器上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
-
- -d :在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登 录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
-
- -p :表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口 映射。
-
- -P :随机使用宿主机的可用端口与容器内暴露的端口映射。
1.创建并进入容器
下面这行命令的意思就是通过镜像 AA 创建一个容器 BB,运行容器并进入容器的 /bin/bash 。
格式:docker run -it --name 容器名称 镜像名称:标签 /bin/bash
- [root@localhost ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- mysql 5.7 eef0fab001e8 3 weeks ago 495MB
- centos 7 eeb6ee3f44bd 14 months ago 204MB
- centos 8 5d0da3dc9764 14 months ago 231MB
- [root@localhost ~]# docker run -it --name centos7 centos:7 /bin/bash
注意:Docker 容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为是空闲状态,就 会自动退出。
退出当前容器:exit
2.守护式方式创建容器
格式:docker run -di --name 容器名称 镜像名称:标签或镜像ID号
- [root@localhost ~]# docker run -id --name centos7-3 eeb6ee3f44bd /bin/bash
- f2e90a5827ee64ad150ab95d3fe74a91dc3d355424243ae4e33a72f898353c69
3.登录守护式容器方式
格式:docker exec -it 容器名称|容器ID /bin/bash
- [root@localhost ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- f2e90a5827ee eeb6ee3f44bd "/bin/bash" About a minute ago Up About a minute centos7-3
- [root@localhost ~]# docker exec -it centos7-3 /bin/bash
- [root@f2e90a5827ee /]#
1.停止容器
格式:docker stop 容器名称|容器ID
2.启动容器
格式:docker start 容器名称|容器ID
3.重启容器
格式:docker restart 容器名称|容器ID
4.停止容器
格式:docker kill 容器名称|容器ID
1.删除指定容器
格式:docker rm 容器名称|容器ID
2.删除多个容器
格式:docker rm 容器名称|容器ID 容器名称|容器ID
如果我们需要将文件拷贝到容器内可以使用 cp 命令。
格式:docker cp 需要拷贝的文件或目录 容器名称:容器目录
- [root@localhost ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- f2e90a5827ee eeb6ee3f44bd "/bin/bash" 5 minutes ago Up 5 minutes centos7-3
-
- [root@localhost ~]# docker cp /root/1.sql centos7-3:/root
- [root@localhost ~]# docker exec -it centos7-3 /bin/bash
- [root@f2e90a5827ee /]# ls /root/
- 1.sql anaconda-ks.cfg
也可以将文件从容器内拷贝出来(命令在宿主机中使用)。
格式:docker cp 容器名称:容器目录 需要拷贝的文件或目录
- [root@f2e90a5827ee /]# touch /root/test.txt
- [root@f2e90a5827ee /]# exit
- exit
- [root@localhost ~]# docker cp centos7-3:/root/test.txt /tmp/
- [root@localhost ~]# ls /tmp/
- test.txt
创建容器添加 -v 参数,格式为 宿主机目录:容器目录
例如:
- [root@localhost ~]# ls
- 1.sql all-mysql.sql file1 ip_yes.txt nginx school2022-11-15 userinfo.txt
- 1.txt anaconda-ks.cfg fornum.sh mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz num.txt sh.bzip2.tar UserSystem.sh
- 2022-10-21all.sql cut_nginx_log.sh info.txt mysqldata original-ks.cfg test
- a1-mysql.sql etc.tar.zip install.cfg mysqldata2022-08-15.sql passwd test.txt
- [root@localhost ~]# docker run -it -v /root/:/root/ --name centos7-4 centos:7
- [root@5edc752038e0 /]# ls /root
- 1.sql all-mysql.sql fornum.sh mysqldata passwd userinfo.txt
- 1.txt anaconda-ks.cfg info.txt mysqldata2022-08-15.sql school2022-11-15
- 2022-10-21all.sql cut_nginx_log.sh install.cfg nginx sh.bzip2.tar
- UserSystem.sh etc.tar.zip ip_yes.txt num.txt test
- a1-mysql.sql file1 mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz original-ks.cfg test.txt
# 多目录挂载
docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
1.匿名挂载
匿名挂载只需要写容器目录即可,容器外对应的目录会在 /var/lib/docker/volumes 中生成。
# 匿名挂载
- [root@localhost ~]# docker run -di -v /root/ --name centos7-5 centos:7
- 98b42386e4181ba46a85173740e97c47111e755c19f6716dcd72561e5d24cd3d
# 查看 volume 数据卷信息
- [root@localhost ~]# docker volume ls
- DRIVER VOLUME NAME
- local 7c342abc52d25a5f2e221fb58e01303dcb08761543e5e9c251967263c6c60d58
- local 20777204e22f6797a4a333525769460941d0e76c78020cadafe2bb88a2db6447
- local cb89c1bfd7e7b237cdd9256e773d387d45b70a1a7dc74ee12708790aa0f2f200
- local docker_centos_data
2.具名挂载
具名挂载就是给数据卷起了个名字,容器外对应的目录会在 /var/lib/docker/volume 中生成。
# 具名挂载
- [root@localhost ~]# docker run -di -v centos7-6-root:/root/ --name centos-6 centos:7
- 47411c26febf3237a56312e68046fb66e411d17bd9a42d8b90c85fe18b3577c2
# 查看 volume 数据卷信息
- [root@localhost ~]# docker volume ls
- DRIVER VOLUME NAME
- local 7c342abc52d25a5f2e221fb58e01303dcb08761543e5e9c251967263c6c60d58
- local 20777204e22f6797a4a333525769460941d0e76c78020cadafe2bb88a2db6447
- local cb89c1bfd7e7b237cdd9256e773d387d45b70a1a7dc74ee12708790aa0f2f200
- local centos7-6-root
- local docker_centos_data
3.指定目录挂载
一开始给大家讲解的挂载方式就属于指定目录挂载,这种方式的挂载不会在 /var/lib/docker/volume 目录生成内容。
格式:docker run -di -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
4.查看目录挂载关系
通过 docker volume inspect 数据卷名称 可以查看该数据卷对应宿主机的目录地址。
- [root@localhost ~]# docker volume inspect centos7-6-root
- [
- {
- "CreatedAt": "2022-11-30T06:55:40Z",
- "Driver": "local",
- "Labels": null,
- "Mountpoint": "/var/lib/docker/volumes/centos7-6-root/_data",
- "Name": "centos7-6-root",
- "Options": null,
- "Scope": "local"
- }
- ]
通过 docker inspect 容器ID或名称 ,在返回的 JSON 节点中找到 Mounts ,可以查看详细的数据 挂载信息。
5.只读/读写挂载
# 只读。只能通过修改宿主机内容实现对容器的数据管理。
格式:docker run -it -v /宿主机目录:/容器目录:ro 镜像名
- [root@localhost ~]# docker run -it -v /root/:/root:ro centos:7
- [root@f3dad8bf6874 /]# ls /root
- 1.sql a1-mysql.sql etc.tar.zip install.cfg mysqldata2022-08-15.sql passwd test.txt
- 1.txt all-mysql.sql file1 ip_yes.txt nginx school2022-11-15 userinfo.txt
- 2022-10-21all.sql anaconda-ks.cfg fornum.sh mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz num.txt sh.bzip2.tar
- UserSystem.sh cut_nginx_log.sh info.txt mysqldata original-ks.cfg test
- [root@f3dad8bf6874 /]# echo 233 > /root/1.sql
- bash: /root/1.sql: Read-only file system
# 读写,默认。宿主机和容器可以双向操作数据。
格式:docker run -it -v /宿主机目录:/容器目录:rw 镜像名
6.volumes-from(继承)
# 容器 centos7-01 指定目录挂载
docker run -di -v /mydata/docker_centos/data:/usr/local/data --name centos7-01 centos:7
# 容器 centos7-04 和 centos7-05 相当于继承 centos7-01 容器的挂载目录
- docker run -di --volumes-from centos7-01:ro --name centos7-04 centos:7
-
- docker run -di --volumes-from centos7-01:rw --name centos7-05 centos:7
我们可以通过以下命令查看容器的元信息。
格式:docker inspect 容器名称|容器ID
- [root@localhost ~]# docker inspect centos7-2
- [
- {
- "Id": "cab1b43029bb4e68058971d06e62e67fcc3d3df49cdd9a2c285ca332bbb5d003",
- "Created": "2022-11-30T06:29:54.080391503Z",
- "Path": "/bin/bash",
- "Args": [],
- "State": {
- "Status": "exited",
- "Running": false,
- "Paused": false,
- "Restarting": false,
- "OOMKilled": false,
- "Dead": false,
- "Pid": 0,
- "ExitCode": 127,
- "Error": "",
- "StartedAt": "2022-11-30T06:29:54.237043945Z",
- "FinishedAt": "2022-11-30T06:30:06.600353835Z"
- },
- "Image": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9",
- "ResolvConfPath": "/var/lib/docker/containers/cab1b43029bb4e68058971d06e62e67fcc3d3df49cdd9a2c285ca332bbb5d003/resolv.conf",
- "HostnamePath": "/var/lib/docker/containers/cab1b43029bb4e68058971d06e62e67fcc3d3df49cdd9a2c285ca332bbb5d003/hostname",
- "HostsPath": "/var/lib/docker/containers/cab1b43029bb4e68058971d06e62e67fcc3d3df49cdd9a2c285ca332bbb5d003/hosts",
- "LogPath": "/var/lib/docker/containers/cab1b43029bb4e68058971d06e62e67fcc3d3df49cdd9a2c285ca332bbb5d003/cab1b43029bb4e68058971d06e62e67fcc3d3df49cdd9a2c285ca332bbb5d003-json.log",
- "Name": "/centos7-2",
- "RestartCount": 0,
- "Driver": "overlay2",
- "Platform": "linux",
- "MountLabel": "",
- "ProcessLabel": "",
- "AppArmorProfile": "",
- "ExecIDs": null,
- "HostConfig": {
- "Binds": null,
- "ContainerIDFile": "",
- "LogConfig": {
- "Type": "json-file",
- "Config": {}
- },
- "NetworkMode": "default",
- "PortBindings": {},
- "RestartPolicy": {
- "Name": "no",
- "MaximumRetryCount": 0
- },
- "AutoRemove": false,
- "VolumeDriver": "",
- "VolumesFrom": null,
- "CapAdd": null,
- "CapDrop": null,
- "CgroupnsMode": "host",
- "Dns": [],
- "DnsOptions": [],
- "DnsSearch": [],
- "ExtraHosts": null,
- "GroupAdd": null,
- "IpcMode": "private",
- "Cgroup": "",
- "Links": null,
- "OomScoreAdj": 0,
- "PidMode": "",
- "Privileged": false,
- "PublishAllPorts": false,
- "ReadonlyRootfs": false,
- "SecurityOpt": null,
- "UTSMode": "",
- "UsernsMode": "",
- "ShmSize": 67108864,
- "Runtime": "runc",
- "ConsoleSize": [
- 0,
- 0
- ],
- "Isolation": "",
- "CpuShares": 0,
- "Memory": 0,
- "NanoCpus": 0,
- "CgroupParent": "",
- "BlkioWeight": 0,
- "BlkioWeightDevice": [],
- "BlkioDeviceReadBps": null,
- "BlkioDeviceWriteBps": null,
- "BlkioDeviceReadIOps": null,
- "BlkioDeviceWriteIOps": null,
- "CpuPeriod": 0,
- "CpuQuota": 0,
- "CpuRealtimePeriod": 0,
- "CpuRealtimeRuntime": 0,
- "CpusetCpus": "",
- "CpusetMems": "",
- "Devices": [],
- "DeviceCgroupRules": null,
- "DeviceRequests": null,
- "KernelMemory": 0,
- "KernelMemoryTCP": 0,
- "MemoryReservation": 0,
- "MemorySwap": 0,
- "MemorySwappiness": null,
- "OomKillDisable": false,
- "PidsLimit": null,
- "Ulimits": null,
- "CpuCount": 0,
- "CpuPercent": 0,
- "IOMaximumIOps": 0,
- "IOMaximumBandwidth": 0,
- "MaskedPaths": [
- "/proc/asound",
- "/proc/acpi",
- "/proc/kcore",
- "/proc/keys",
- "/proc/latency_stats",
- "/proc/timer_list",
- "/proc/timer_stats",
- "/proc/sched_debug",
- "/proc/scsi",
- "/sys/firmware"
- ],
- "ReadonlyPaths": [
- "/proc/bus",
- "/proc/fs",
- "/proc/irq",
- "/proc/sys",
- "/proc/sysrq-trigger"
- ]
- },
- "GraphDriver": {
- "Data": {
- "LowerDir": "/var/lib/docker/overlay2/63a8e3e1f155f38a51bebce3b9a233b2bff1ba4630e5993276a0d3cce0dbc61f-init/diff:/var/lib/docker/overlay2/9b62e8d0a4882ca9b207fae4a54e220a00f5556d52f0fa8ad933e3863763b43b/diff",
- "MergedDir": "/var/lib/docker/overlay2/63a8e3e1f155f38a51bebce3b9a233b2bff1ba4630e5993276a0d3cce0dbc61f/merged",
- "UpperDir": "/var/lib/docker/overlay2/63a8e3e1f155f38a51bebce3b9a233b2bff1ba4630e5993276a0d3cce0dbc61f/diff",
- "WorkDir": "/var/lib/docker/overlay2/63a8e3e1f155f38a51bebce3b9a233b2bff1ba4630e5993276a0d3cce0dbc61f/work"
- },
- "Name": "overlay2"
- },
- "Mounts": [],
- "Config": {
- "Hostname": "cab1b43029bb",
- "Domainname": "",
- "User": "",
- "AttachStdin": true,
- "AttachStdout": true,
- "AttachStderr": true,
- "Tty": true,
- "OpenStdin": true,
- "StdinOnce": true,
- "Env": [
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
- ],
- "Cmd": [
- "/bin/bash"
- ],
- "Image": "eeb6ee3f44bd",
- "Volumes": null,
- "WorkingDir": "",
- "Entrypoint": null,
- "OnBuild": null,
- "Labels": {
- "org.label-schema.build-date": "20201113",
- "org.label-schema.license": "GPLv2",
- "org.label-schema.name": "CentOS Base Image",
- "org.label-schema.schema-version": "1.0",
- "org.label-schema.vendor": "CentOS",
- "org.opencontainers.image.created": "2020-11-13 00:00:00+00:00",
- "org.opencontainers.image.licenses": "GPL-2.0-only",
- "org.opencontainers.image.title": "CentOS Base Image",
- "org.opencontainers.image.vendor": "CentOS"
- }
- },
- "NetworkSettings": {
- "Bridge": "",
- "SandboxID": "4faf35abf5f60d628fc545b1472f0b86dcad768bdc869406a7a2e9288be77df2",
- "HairpinMode": false,
- "LinkLocalIPv6Address": "",
- "LinkLocalIPv6PrefixLen": 0,
- "Ports": {},
- "SandboxKey": "/var/run/docker/netns/4faf35abf5f6",
- "SecondaryIPAddresses": null,
- "SecondaryIPv6Addresses": null,
- "EndpointID": "",
- "Gateway": "",
- "GlobalIPv6Address": "",
- "GlobalIPv6PrefixLen": 0,
- "IPAddress": "",
- "IPPrefixLen": 0,
- "IPv6Gateway": "",
- "MacAddress": "",
- "Networks": {
- "bridge": {
- "IPAMConfig": null,
- "Links": null,
- "Aliases": null,
- "NetworkID": "c9406d1cb33e3be61d308ad252c3114db3f70de5adb27fb750679f42800c0b31",
- "EndpointID": "",
- "Gateway": "",
- "IPAddress": "",
- "IPPrefixLen": 0,
- "IPv6Gateway": "",
- "GlobalIPv6Address": "",
- "GlobalIPv6PrefixLen": 0,
- "MacAddress": "",
- "DriverOpts": null
- }
- }
- }
- }
- ]
也可以直接执行下面的命令直接输出 IP 地址。
格式:docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器ID
- [root@localhost ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' centos7-3
- 172.17.0.2
感谢大家的支持,如果喜欢可以给博主点一个关注,后续还会更新Docker方面的知识拓展
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。