目录
一、镜像操作
1、搜索仓库镜像
2、拉取镜像
3、查看主机目前有哪些镜像
4、导出镜像
5、镜像删除
6、导入镜像
7、查看镜像详细信息
二、容器操作
1、启动容器
1.1创建容器再启动
1.2直接运行
2、容器查看
3、容器关闭
4、容器启动
5、查看容器详细信息
6、查询容器日志
7、对容器进行指定命令
8、删除容器
8.1先停止在删除
8.2直接删除
8.3删除所有停止状态的容器
9、容器中管理里数据
9.1创建一个数据卷
9.2查看数据卷详细信息
9.3数据卷挂载
9.4删除数据卷
10、查看容器内进程
#查看镜像、容器、数据卷等所占所占内存大小
docker如果无法自动补全需要安装bash-completion,接着如果source /usr/share/bash-completion/bash_completion一遍tab报错就再source一遍即可
docker search NAME
[root@docker-learn etc]# docker search nginx
docker pull [选项] [docker resgistry 地址[:端口号]/]仓库名[:标签]
[root@docker-learn docker]# docker pull httpd
#打标签
[root@docker-learn bash-completion]# docker tag nginx:1.14-alpine nginx1:1.14
[root@docker-learn bash-completion]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest dabbfbe0c57b 14 months ago 144MB
hello-world latest feb5d9fea6a5 17 months ago 13.3kB
nginx1 1.14 8a2fb25a19f5 3 years ago 16MB
nginx 1.14-alpine 8a2fb25a19f5 3 years ago 16MB
#查看镜像层数(dokcer history NAME)
[root@docker-learn bash-completion]# docker history nginx:1.14-alpine
IMAGE CREATED CREATED BY SIZE COMMENT
8a2fb25a19f5 3 years ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
3 years ago /bin/sh -c #(nop) STOPSIGNAL SIGTERM 0B
3 years ago /bin/sh -c #(nop) EXPOSE 80 0B
3 years ago /bin/sh -c #(nop) COPY file:ebf4f0eb33621cc0… 1.09kB
3 years ago /bin/sh -c #(nop) COPY file:4c82b9f10b84c567… 643B
3 years ago /bin/sh -c GPG_KEYS=B0F4253373F8F6F510D42178… 10.5MB
3 years ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.14.2 0B
3 years ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
3 years ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
3 years ago /bin/sh -c #(nop) ADD file:2e3a37883f56a4a27… 5.53MB
docker images
[root@docker-learn docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest dabbfbe0c57b 14 months ago 144MB
hello-world latest feb5d9fea6a5 17 months ago 13.3kB
[root@docker-learn ~]# docker image ls
#查看指定镜像
[root@docker-learn ~]# docker image ls nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.14-alpine 8a2fb25a19f5 3 years ago 16MB
多个镜像导出可以使用-o
[root@docker-learn ~]# docker image save -o ./nginx_alpine.tar.gz nginx:1.14-alpine alpine:latest
[root@docker-learn ~]# docker image save nginx > ./nginx_test.tar.gz
[root@docker-learn ~]# ls
anaconda-ks.cfg nginx_alpine.tar.gz nginx_test.tar.gz test.sh
docker image rm或者docker rmi两种方式,如果镜像在使用无法删除的情况下加上 -f
[root@docker-learn ~]# docker image rm nginx1:1.14
[root@docker-learn ~]# docker rmi nginx:1.14-alpine
[root@docker-learn ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest dabbfbe0c57b 14 months ago 144MB
alpine latest c059bfaa849c 15 months ago 5.59MB
hello-world latest feb5d9fea6a5 17 months ago 13.3kB
#根据CONTAINER ID删除正在运行的容器
[root@docker-learn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8fe9811a40e8 hello-world "/hello" 44 hours ago Exited (0) 44 hours ago upbeat_heisenberg
4ba48781b3d0 hello-world "/hello" 2 days ago Exited (0) 2 days ago angry_aryabhata
c2bdae3438e5 hello-world "/hello" 2 days ago Exited (0) 2 days ago crazy_wright
2a9636592b10 hello-world "/hello" 2 days ago Exited (0) 2 days ago beautiful_pascal
14c82d950d23 hello-world "/hello" 2 days ago Exited (0) 2 days ago gracious_keller
[root@docker-learn ~]# docker rm 8fe
8fe
[root@docker-learn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ba48781b3d0 hello-world "/hello" 2 days ago Exited (0) 2 days ago angry_aryabhata
c2bdae3438e5 hello-world "/hello" 2 days ago Exited (0) 2 days ago crazy_wright
2a9636592b10 hello-world "/hello" 2 days ago Exited (0) 2 days ago beautiful_pascal
14c82d950d23 hello-world "/hello" 2 days ago Exited (0) 2 days ago gracious_keller
docker image load -i 包名
[root@docker-learn ~]# docker image load -i nginx_test.tar.gz
a464c54f93a9: Loading layer [==================================================>] 5.796MB/5.796MB
5ac9a5170bf2: Loading layer [==================================================>] 11.43MB/11.43MB
b2cbae4b8c15: Loading layer [==================================================>] 3.584kB/3.584kB
076c58d2644f: Loading layer [==================================================>] 4.608kB/4.608kB
Loaded image: nginx:1.14-alpine
[root@docker-learn ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest dabbfbe0c57b 14 months ago 144MB
alpine latest c059bfaa849c 15 months ago 5.59MB
hello-world latest feb5d9fea6a5 17 months ago 13.3kB
nginx 1.14-alpine 8a2fb25a19f5 3 years ago 16MB
docker image inspect NAME
[root@docker-learn ~]# docker image inspect httpd:latest
docker create 镜像名
docker start 容器名
[root@docker-learn ~]# docker create nginx
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-t :打开⼀个终端,像使⽤交换机⼀样使⽤容器 -i:交互式访问 --name:容器名字 --network:指定⽹络 --rm:容器⼀停,⾃动删除 -d:后台运⾏容器,返回容器ID;否则会⼀直占据着终端 -p : 端⼝映射,将容器内服务的端⼝映射在宿主机的指定端⼝,格式为:主机(宿主)端⼝:容器端⼝ -P: 随机端⼝映射,容器内部端⼝随机映射到主机的端
[root@docker-learn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7928288e5946 nginx "/docker-entrypoint.…" 11 seconds ago Up 10 seconds 0.0.0.0:32769->80/tcp, :::32769->80/tcp elastic_brown
9abf2c24421a nginx "/docker-entrypoint.…" 3 minutes ago Exited (0) 2 minutes ago stoic_ramanujan
71f2a3be8842 nginx "/docker-entrypoint.…" 31 minutes ago Created intelligent_jemison
14c82d950d23 hello-world "/hello" 2 days ago Exited (0) 27 minutes ago gracious_keller
#启动容器自动分配端口
[root@docker-learn ~]# docker run -P nginx
#根据container id进入容器
[root@docker-learn ~]# docker exec -it 792 bash
root@7928288e5946:/#
#指定本地端口和设置容器名称
[root@docker-learn ~]# docker run --name web1 -d -p 8888:80 nginx
cc11a9acd5138308b14a849a0bc28bfc4c6980e94fdfe806ad23718367b6b32b
[root@docker-learn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc11a9acd513 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
14c82d950d23 hello-world "/hello" 3 days ago Exited (0) 2 hours ago gracious_keller
gracious_keller
#根据container id/names进入容器
[root@docker-learn ~]# docker exec -it cc1 bash
root@cc11a9acd513:/# exit
exit
docker ps = docker container ls
[root@docker-learn ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc11a9acd513 nginx "/docker-entrypoint.…" 20 minutes ago Up 20 minutes 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
#-a会输出已经结束使用的容器
[root@docker-learn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4d3472fa94d nginx "/docker-entrypoint.…" 50 seconds ago Exited (0) 48 seconds ago xenodochial_noyce
cc11a9acd513 nginx "/docker-entrypoint.…" 20 minutes ago Up 20 minutes 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
14c82d950d23 hello-world
#查看所有容器的container id: docker ps -aq
docker stop id/names docker kill id/names
[root@docker-learn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
acfd118c86e6 nginx "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 80/tcp eloquent_poincare
4852d00aa141 nginx "/docker-entrypoint.…" 11 seconds ago Up 10 seconds 80/tcp bold_fermi
cc11a9acd513 nginx "/docker-entrypoint.…" 28 minutes ago Up 28 minutes 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
14c82d950d23 hello-world "/hello" 3 days ago Exited (0) 2 hours ago gracious_keller
[root@docker-learn ~]# docker stop acf
id/names
[root@docker-learn ~]# docker kill 485
485
[root@docker-learn ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc11a9acd513 nginx "/docker-entrypoint.…" 29 minutes ago Up 29 minutes 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
docker start id/names
docker restart id/names
[root@docker-learn ~]# docker start acf
acf
[root@docker-learn ~]# docker restart bold_fermi
bold_fermi
[root@docker-learn ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
acfd118c86e6 nginx "/docker-entrypoint.…" 6 minutes ago Up 33 seconds 80/tcp eloquent_poincare
4852d00aa141 nginx "/docker-entrypoint.…" 6 minutes ago Up 18 seconds 80/tcp bold_fermi
cc11a9acd513 nginx "/docker-entrypoint.…" 34 minutes ago Up 34 minutes 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
docker inspect id/names
[root@docker-learn ~]# docker inspect 14c
docker logs id/names
[root@docker-learn ~]# curl 192.168.157.10:8888
[root@docker-learn ~]# docker logs web1
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-d, :后台运行
-e, :设置环境变量
-i, :交互式
-t, :打开一个终端
#查看容器所分配的ip
[root@docker-learn ~]# docker exec -it web1 hostname -I
172.17.0.2
docker kill /stop id/names
doker rm id/names
#可以使用 docker kill -s 9 CONTAINER ID进行停止进程
docker rm -f id/names
docker container
prune Remove all stopped containers
[root@docker-learn ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
acfd118c86e673a8ada0a780f1622447798455a9dea753237437edab73083ab5
4852d00aa1416f48f3767d819930210505867e9ae1b369b301fc156a4abad81f
14c82d950d234862447e8a5b55aa35124a121d33be66d718d29f959a192fd1ac
Total reclaimed space: 2.188kB
[root@docker-learn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc11a9acd513 nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
docker volume create NAME
[root@docker-learn ~]# docker volume create d_vol
d_vol
docker volume inspect NAME
[root@docker-learn ~]# docker volume inspect d_vol
[
{
"CreatedAt": "2023-03-09T19:33:30+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/d_vol/_data",
"Name": "d_vol",
"Options": null,
"Scope": "local"
}
]
创建容器nginx设置名称为web2,并将数据卷挂载到/usr/share/nginx/html
[root@docker-learn ~]# docker run -d -P --name web2 -v d_vol:/usr/share/nginx/html nginx:latest
ca2de26cd649fa0157a5d99bdb19708c1776eea336570d523f454354f2ad3dae
[root@docker-learn ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca2de26cd649 nginx:latest "/docker-entrypoint.…" 14 seconds ago Up 12 seconds 0.0.0.0:32772->80/tcp, :::32772->80/tcp web2
cc11a9acd513 nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
#此时可以在虚拟机中修改容器的index.html也就是欢迎界面,同时无论是在容器中还是虚拟机中修改index.html文件都是相应会发生改变的,并且当容器删除之后数据卷依旧存在,包括如下例子中的_data/的数据会进行保留。
[root@docker-learn d_vol]# ll _data/
total 8
-rw-r--r--. 1 root root 497 Dec 28 2021 50x.html
-rw-r--r--. 1 root root 615 Dec 28 2021 index.html
[root@docker-learn d_vol]# pwd
/var/lib/docker/volumes/d_vol
docker volume rm -f NAME
#必须在没有容器使用数据卷的情况下才可以删除,否则会失败。
[root@docker-learn d_vol]# docker volume rm -f d_vol
#如果有容器的使用情况,先删除容器再删除数据卷
[root@docker-learn d_vol]# docker rm -f web2
web2
[root@docker-learn d_vol]# docker volume rm d_vol
d_vol
#删除容器时同时删除数据卷:docker rm -v id/names
#删除所有不再使用的数据卷:docker volume prune
docker top id/names
[root@docker-learn volumes]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc11a9acd513 nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 0.0.0.0:8888->80/tcp, :::8888->80/tcp web1
[root@docker-learn volumes]# docker top web1
UID PID PPID C STIME TTY TIME CMD
root 81922 81900 0 16:02 ? 00:00:00 nginx: master process nginx -g daemon off;
101 81972 81922 0 16:02 ? 00:00:00 nginx: worker process
101 81973 81922 0 16:02 ? 00:00:00 nginx: worker process
docker system df
[root@docker-learn d_vol]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 5 1 226.3MB 165.2MB (72%)
Containers 1 1 1.11kB 0B (0%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B