docker说明
docker主要有仓库,镜像,容器
仓库是存放镜像的地方
镜像是一个个模板,用来快速创建容器
容器是从镜像克隆出来的运行的程序
docker常用命令
帮助命令
docker version # 显示docker版本信息
docker info # 显示docker系统系统信息,镜像以及容器数量等信息
docker 命令 --help # 帮助命令
systemctl enable docke #设置开机启动 docker
基本命令
启动docker命令
systemctl start docker
关闭docker命令
systemctl stop docker
重启docker命令
systemctl restart docker
查看docker运行状态
systemctl status docker
Docker 镜像命令
查看本地镜像 docker images
# docker images 查看本地的所有镜像
[root@izuf6akcgealirj602cmxsz /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
# 命令参数含义
REPOSITORY # 镜像仓库源
TAG # 镜像的标签,版本
IMAGE ID # 镜像的ID,唯一表示
CREATED # 镜像的创建时间
SIZE # 镜像的大小
# 可选项
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像ID
docker inspect nginx #查看nginx镜像详细信息
查看镜像详细信息docker inspect nginx
sh
[root@VM-12-4-centos docker]# docker inspect nginx
[
{
"Id": "sha256:5ef79149e0ec84a7a9f9284c3f91aa3c20608f8391f5445eabe92ef07dbda03c",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:447a8665cc1dab95b1ca778e162215839ccbb9189104c79d7ec3a81e14577add"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2024-08-14T21:31:12Z",
"DockerVersion": "",
"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.27.1",
"NJS_VERSION=0.8.5",
"NJS_RELEASE=1~bookworm",
"PKG_RELEASE=1~bookworm",
"DYNPKG_RELEASE=2~bookworm"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": [
"/docker-entrypoint.sh"
],
"OnBuild": null,
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGQUIT"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 187694648,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/f8823aa8a0a0d01be631e89e483725db5936035efd2194081d00d104bf21035f/diff:/var/lib/docker/overlay2/738fd9859fcb44f55690d0a5ec1044b424689a02583925dde021a50bdad73a6e/diff:/var/lib/docker/overlay2/5bd58e1cf855619ac364a8ddf719649c672a1473a8ca066f5a08867791e0c885/diff:/var/lib/docker/overlay2/f029e92cb99d92a2f8a1861ecd488e05c364cccd9f17d45c6268308600d8ae22/diff:/var/lib/docker/overlay2/9d74e67d13d0a47c143f796ccf90c3874ef4d4a024ea72f547ed19e46849ed78/diff:/var/lib/docker/overlay2/f5db936e3a67feca01233b33c9aa61c3ef630049326f289b7bf1b61ddc8cb40b/diff",
"MergedDir": "/var/lib/docker/overlay2/0b47cc7a25176e0212c4073a3e53fda44808a3174b14b14d5adba639d992874e/merged",
"UpperDir": "/var/lib/docker/overlay2/0b47cc7a25176e0212c4073a3e53fda44808a3174b14b14d5adba639d992874e/diff",
"WorkDir": "/var/lib/docker/overlay2/0b47cc7a25176e0212c4073a3e53fda44808a3174b14b14d5adba639d992874e/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:9853575bc4f955c5892dd64187538a6cd02dba6968eba9201854876a7a257034",
"sha256:72db5db515fdd9ae82b759fc207fdfbcc31567c28bb87950abc94ce1d60b2d40",
"sha256:8b87c0c6652495401acfbe029ede84a5f327664770561ba5f8b7fe9149f52dd0",
"sha256:ec1a2ca4ac8784def146544fc7068db06a188d2da4fd7c4e134a76415b8bc1a8",
"sha256:55e54df86207fa772302a6fc1e78eb60bd7e3ebd4f913ef7f5ad668ad69ab64d",
"sha256:f4f00eaedec7933a48b09f3948c685c41d55f0bf5906295dd022c05b65082344",
"sha256:5f0272c6e96d5cd8ea1c6507cfce81980d4b99322bd037d99250a79d4c0b9f1a"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
sh
"ExposedPorts": {
"80/tcp": {} #端口
},
"Entrypoint": [
"/docker-entrypoint.sh" #启动命令
],
docker search 查找镜像
sh
# docker search 查找镜像
[root@izuf6akcgealirj602cmxsz /]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation... 11931 [OK]
mariadb MariaDB Server is a high performing open sou... 4561 [OK]
# 命令参数含义
NAME # 镜像仓库
DESCRIPTION # 镜像描述信息
STARS # 镜像收藏数
OFFICIAL # 是否为docker官方发布的镜像
AUTOMATED # 是否为自动化构建的镜像,关于自动化构建,可以查看官方文档:https://docs.docker.com/docker-hub/builds/#how-automated-builds-work
# 可选项
--filter=STARS=5000 # 查找收藏数量大于5000的镜像
[root@izuf6akcgealirj602cmxsz /]# docker search mysql --filter=STARS=5000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation... 11931 [OK]
docker pull 拉取镜像
sh
# 直接拉去镜像,默认拉去最新版本(目前为8.0) docker pull 镜像名
[root@izuf6akcgealirj602cmxsz /]# docker pull mysql
Using default tag: latest # 最新版本镜像
latest: Pulling from library/mysql
72a69066d2fe: Pull complete # 分层下载,docker镜像核心(联合文件系统)
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 镜像真实地址
# 等价关系
docker pull mysql 等价于 docker pull docker.io/library/mysql:latest
# 拉去指定版本的镜像 docker pull 镜像名[:tag]
[root@izuf6akcgealirj602cmxsz /]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists # 本地已经存在的文件层就不用在此下载了
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi删除镜像
-f 强制删除
sh
# 删除指定容器 docker rmi 镜像ID
[root@izuf6akcgealirj602cmxsz /]# docker rmi c20987f18b13
Untagged: mysql:5.7
Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76 # 只删除了当前版本(mysql5.7)所下载的文件层
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92
# [root@izuf6akcgealirj602cmxsz /]# docker rmi 镜像ID #删除指定镜像
# [root@izuf6akcgealirj602cmxsz /]# docker rmi 镜像ID 镜像ID ... #删除多个镜像
# [root@izuf6akcgealirj602cmxsz /]# docker rmi $(docker images -aq) #删除所有镜像
容器命令
说明 :有了镜像才可以运行容器
创建容器并运行
sh
# docker run [:可选参数] image
# 命令参数含义
--name="容器名称" # 自定义容器名称,用于区别容器
-d # 后台运行
-it # 使用交互模式运行,进入容器
-p # 指定容器端口
-p ip:宿主机端口:容器端口
-p 宿主机端口:容器端口
-p 容器端口
-P # 随机指定端口
-v # 文件挂载 -v 宿主机目录:容器目录 -v /host/config:/container/config
# 启动并进入容器
[root@izuf6akcgealirj602cmxsz ~]# docker run -it centos /bin/bash
[root@izuf6akcgealirj602cmxsz ~]# docker exec -it 容器id /bin/bash
# 查看容器内centos,基础版本,很多命令都是不完善的
[root@e901f5c1bb19 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
列出容器
sh
# docker ps 查看正在运行的容器
# 命令参数含义
-a # 列出所有容器,正在运行或者曾经运行过的容器
-q # 只显示容器ID
-n=? # 显示最近创建的n个容器
# 列出所有容器,正在运行或者曾经运行过的容器
[root@izuf6akcgealirj602cmxsz ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e901f5c1bb19 centos "/bin/bash" 15 minutes ago Exited (0) 12 minutes ago hardcore_lumiere
# 只显示容器ID
[root@izuf6akcgealirj602cmxsz ~]# docker ps -aq
e901f5c1bb19
退出容器
sh
# 容器直接停止并退出
[root@d130c281ffda /]# exit
exit
# 容器不停止退出
ctrl + P + Q
删除容器
sh
# docker rm 容器ID # 删除指定容器,不能删除正在运行的容器
# docker rm $(docker ps -aq) # 删除所有容器
# docker ps -a -q|xargs docker rm # 删除所有容器
# 命令参数含义
-f # 强制删除
启动和停止容器
sh
# 启动容器
docker start 容器ID
# 重启容器
docker restart 容器ID
# 停止容器
docker stop 容器ID
# 杀掉容器
docker kill 容器ID
进入容器docker exec
sh
docker exec -it nginx /bin/bash
查看日志docker logs
查看容器中进程信息 docker top
复制文件
docker cp
sh
#复制容器文件到主机
# docker cp 容器id:容器内路径 主机目的路径
docker cp centos7-2:/tmp/1.txt ./
# 复制主机文件到容器
# docker cp [选项] 源路径 容器名:目标路径
docker cp 2.txt centos7-2:/tmp/ #把宿主机的文件复制到容器
端口映射的三种方式
指定端口-p
sh
docker run -d --name nginx01 -p 80:80 nginx #把容器的80端口映射到宿主机的80端口
# 选项:-p 宿主机端口:容器端口
随机端口-P
sh
docker run -d --name nginx06 -P nginx
临时暴露端口--expose
sh
docker run -it -d --expose 88 --name centos7-2 centos:7 /bin/bash
# 选项 --expose 镜像没有暴露端口,在启动容器是临时暴露指定的端口
卷挂载的三种方式
指定目录挂载: -v 宿主机路径:容器路径
sh
docker run -d --name nginx03 -v /tmp/www:/usr/share/nginx/html/ -p 80:80 nginx
具名挂载:-v 卷名:容器路径
docker run -d --name nginx03 -v www:/usr/share/nginx/html/ -p 80:80 nginx
# 默认的宿主机挂载目录:/var/lib/docker/volumes/
匿名挂载:-v 容器路径
docker run -d --name nginx04 -v /usr/share/nginx/html/ -p 80:80 nginx
dockers网络管理
网络类型
host 模式:使用--net=host 指定,能与宿主机在同一个网络中通信,但是没有独立IP地址。
none 模式:Docker 容器拥有自己的Network Namespace ,但是,并不为Docker 容器进行任何网络配置
bridge 模式是docker 的默认网络模式,不用--net 参数,就是bridge模式。相当于VMware 中的NAT模式
网络创建
sh
docker network create --subnet=192.168.1.0/24 mynet #创建网络,默认是bridge模式
docker network ls #查看网络
docker network rm mynet
docker network --help #查看和网络相关的操作
镜像仓库
登录
docker login hub.docker.com
# docker login #不知道仓库地址,默认官方仓库
上传镜像
sh
# 上传镜像
# 需要打标记,修改本地镜像的名字为账号名/镜像名
# 例:docker tag centos:7 lu1234/centos:v1
docker login
docker push lu1234/centos:v1
下载镜像
下载镜像
docker pull
例:docker push lu1234/centos:v1
创建私有仓库
作用:
1.节约带宽:因为如果用docker或阿里云官方的仓库走的互联网浪费带宽,而且慢。
2.提供资源利用和安全:因为公司内部的镜像,推送到本地仓库,更方便公司内部人员用,而且安全性高。
sh
# 1)拉取镜像
docker pull registr y
# 2)运行容器
docker run -d \
-v /home/docker/registr y:/var/lib/registr y \
-p 5000:5000 \
--restart=always \
--name registr y \
registr y
# 验证仓库可用性
curl http://192.168.100.140:5000/v2/_catalog
# 上传镜像到私有库
docker tag nginx 192.168.100.140:5000/nginx #镜像重新打标记
docker push 192.168.100.140:5000/nginx
# 推送需要https协议,需要修改配置文件
vim /etc/docker/daemon.json
{
"registr y-mirrors": ["http://hub-mirror.c.163.com"],
"insecure-registries": ["192.168.100.140:5000"]
}
# 重启服务再次推送
# 拉取镜像
docker pull 192.168.100.140:5000/nginx