docker常用命令(二)
docker常用命令汇总
3)docker容器命令
- docker run 启动容器
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数
docker run -it ubuntu /bin/bash
docker run --name=ubuntu_007 -it ubuntu /bin/bash
- docker ps 列出当前正在运行的容器命令
Usage: docker ps [OPTIONS]
[root@WIND ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
159540a83147 ubuntu "bash" 5 seconds ago Up 4 seconds flamboyant_bouman
e5b9db89eb05 ubuntu "/bin/bash" 26 seconds ago Up 25 seconds ubuntu_007
[root@WIND ~]#
docker ps -a 列出当前正在运行的及历史运行过的容器
-n参数显示最近创建的n个容器,包括已经停止的容器
3. docker run 启动的容器,怎么退出
exit命令直接退出,容器会停止
ctrl + p + q 退出,容器不会停止
启动已经停止的容器
docker start 容器ID或者容器名
停止正在运行的容器
docker stop 容器ID或者容器名
重启正在运行的容器
docker restart 容器ID或者容器名
强制停止容器
docker kill 容器ID或者容器名
删除已经停止发容器
docker kill 容器ID或者容器名(-f参数强制删除正在运行的容)
删除当前主机所有的容器,包括正在运行的,操作之后容器历史记录都无法再插到
docker rm -f $(docker ps -qa)
docker ps -a -q | xargs docker rm -f
[root@WIND ~]# docker rm -f $(docker ps -qa)
d3a76c59d9f7
a377d10709de
81ba5bce6a7e
f8c8b6d00b0a
75a818ad74c4
9397e6a0cd0e
a5b4c365f498
a314baa8f432
02d02cc63721
bc0b5a5aff68
5edb0ed93c92
cd4154169336
34ce13d1b457
269efecd4202
1edfabfbc754
[root@WIND ~]#
[root@WIND ~]#
[root@WIND ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@WIND ~]#
- 启动容器后台运行服务
docker run -d
docker 容器在后台运行就必须有一个前台进程,容器运行的命令如果不是一直挂起的命令(top, tail等),就会马上退出
docker logs 查看容器日志
[root@WIND ~]# docker logs cfc74b0d5a66
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2022/02/27 09:58:55 [notice] 1#1: using the "epoll" event method
2022/02/27 09:58:55 [notice] 1#1: nginx/1.21.5
2022/02/27 09:58:55 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6)
2022/02/27 09:58:55 [notice] 1#1: OS: Linux 4.18.0-193.28.1.el8_2.x86_64
2022/02/27 09:58:55 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2022/02/27 09:58:55 [notice] 1#1: start worker processes
2022/02/27 09:58:55 [notice] 1#1: start worker process 31
2022/02/27 09:58:55 [notice] 1#1: start worker process 32
docker top 查看容器内部运行的进程
[root@WIND ~]# docker top cfc74b0d5a66
UID PID PPID C STIME TTY TIME CMD
root 9575 9555 0 17:58 ? 00:00:00 nginx: master process nginx -g daemon off;
101 9626 9575 0 17:58 ? 00:00:00 nginx: worker process
101 9627 9575 0 17:58 ? 00:00:00 nginx: worker process
docker inspect ,查看容器内部
docker exec -it 容器ID bashshell , 进入容器并以命令行交互
docker attach 容器ID
[root@WIND ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cfc74b0d5a66 nginx "/docker-entrypoint.…" 15 minutes ago Up 15 minutes 80/tcp stupefied_chebyshev
f1f3be2dbfc5 ubuntu "/bin/bash" 28 minutes ago Up 28 minutes u009
e063ad4e501e ubuntu "/bin/bash" 32 minutes ago Up 32 minutes u007
[root@WIND ~]# docker attach e063ad4e501e
root@e063ad4e501e:/# exit
exit
[root@WIND ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cfc74b0d5a66 nginx "/docker-entrypoint.…" 15 minutes ago Up 15 minutes 80/tcp stupefied_chebyshev
f1f3be2dbfc5 ubuntu "/bin/bash" 28 minutes ago Up 28 minutes u009
[root@WIND ~]#
exit -it 和attach 进入容器是有区别的
一般情况下,我们更常用exec -it
docker top查看容器的进程
[root@WIND ~]# docker top f1f3be2dbfc5
UID PID PPID C STIME TTY TIME CMD
root 9105 9085 0 17:45 pts/0 00:00:00 /bin/bash
[root@WIND ~]#
在另一个终端进入容器
[root@WIND ~]# docker exec -it f1f3be2dbfc5 bash
root@f1f3be2dbfc5:/#
再次docker top, 可以看到多了一个bash进行
root@f1f3be2dbfc5:/#
[root@WIND ~]# docker top f1f3be2dbfc5
UID PID PPID C STIME TTY TIME CMD
root 9105 9085 0 17:45 pts/0 00:00:00 /bin/bash
root 9893 9085 4 18:18 pts/1 00:00:00 bash
[root@WIND ~]#
同样流程用attach参数去操作,就不会看到有多一个bash进程
docker cp 拷贝docker容器里面的文件
从容器拷贝文件到主机
[root@WIND ~]# docker cp /root/posts.sql f1f3be2dbfc5:/tmp/
[root@WIND ~]#
[root@WIND ~]# docker exec -it f1f3be2dbfc5 /bin/bash
root@f1f3be2dbfc5:/# ls /tmp/
a.txt posts.sql
拷贝文件到容器
[root@WIND ~]# docker cp f1f3be2dbfc5:/tmp/a.txt /opt/
[root@WIND ~]# ls /opt/
a.txt bak_db_log.txt bak_html_log.txt containerd
[root@WIND ~]#
docker export 导出整个容器的内容作为一个归档文件(相当于备份整个容器)
docker import 导出的docker归档文件恢复成为一个镜像
[root@WIND ~]# docker export f1f3be2dbfc5 > u009.tar.gz
[root@WIND ~]#
[root@WIND ~]# cat u009.tar.gz | docker import - u009_from_tar:latest_009
sha256:b94b09f8d67331478049c9d10c023503183c9fecf98e49b6277020261055f465
[root@WIND ~]#
查看恢复的镜像
[root@WIND ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
u009_from_tar latest_009 b94b09f8d673 4 seconds ago 73.4MB
nginx latest 605c77e624dd 8 weeks ago 141MB
ubuntu latest ba6acccedd29 4 months ago 72.8MB
[root@WIND ~]#
[root@WIND ~]# docker run -it b94b09f8d673 /bin/bash
root@ac528e12cb0e:/# ls /tmp/
a.txt posts.sql
root@ac528e12cb0e:/#
最后可以看到新恢复的docker 容器里面,是有我们之前拷贝进去的文件的
可以通过这样的操作,来现实数据迁移的,且保证数据的一直性
常用命令汇总: