docker容器基本操作
1、创建容器
(1)新建容器
[root@openEuler-1 ~]# docker create -it ubuntu:latest
1e13caf317353f1c70e554368aadb7148d62a62f74ea0e2d4aec283d0f857c28
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e13caf31735 ubuntu:latest "/bin/bash" 6 seconds ago Created naughty_curran
(2)启动容器
[root@openEuler-1 ~]# docker start naughty_curran
naughty_curran
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e13caf31735 ubuntu:latest "/bin/bash" 4 minutes ago Up 9 seconds naughty_curran
# 注意:docker start 后跟的是容器名称,在创建容器时通过--name来定义,否则自动生成名称
(3)新建并启动容器
[root@openEuler-1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest b52e0b094bc0 4 weeks ago 192MB
ubuntu latest a04dc4851cbc 5 weeks ago 78.1MB
[root@openEuler-1 ~]# docker run -it ubuntu '/bin/bash'
root@739f5b01a99b:/#
exit
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
739f5b01a99b ubuntu "/bin/bash" 8 seconds ago Exited (0) 6 seconds ago dazzling_shamir
当使用docker run来创建并使用容器时,docker在后台允许时的标准操作包括:
1、检查本地是否存在指定的镜像,不存在就从公有仓库下载;
2、利用镜像创建一个容器,并启动该容器;
3、分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
4、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
5、从网桥的地址池配置一个IP地址给容器;
6、执行用户指定的应用程序;
7、执行完毕后被自动终止;
(4)守护态允许
# 使用-d参数,后台运行
[root@openEuler-1 ~]# docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
69dd4a94ab43385abf94f4dff63ec553be20ed7ab06ab0286ab6f1cdfac75ad8
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69dd4a94ab43 ubuntu "/bin/sh -c 'while t…" 18 seconds ago Up 17 seconds thirsty_noether
[root@openEuler-1 ~]#
(5)查看容器输出
[root@openEuler-1 ~]# docker logs 69dd4a94ab43
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
...
2、停止容器
(1)暂停容器
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69dd4a94ab43 ubuntu "/bin/sh -c 'while t…" 3 minutes ago Up 3 minutes thirsty_noether
[root@openEuler-1 ~]# docker pause thirsty_noether
thirsty_noether
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69dd4a94ab43 ubuntu "/bin/sh -c 'while t…" 4 minutes ago Up 4 minutes (Paused) thirsty_noether
(2)终止容器
[root@openEuler-1 ~]# docker stop thirsty_noether
thirsty_noether
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69dd4a94ab43 ubuntu "/bin/sh -c 'while t…" 5 minutes ago Exited (137) 13 seconds ago thirsty_noether
此时,执行docker container prune 命令会自动清除掉所有处于停止状态的容器。
3、进入容器
(1)attach命令
[root@openEuler-1 ~]# docker run -itd ubuntu
b2f0e4ffad5cc026598cf46b82ca20eee5c36683d70c2de6252d82ee60c68bd2
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2f0e4ffad5c ubuntu "/bin/bash" 3 seconds ago Up 2 seconds pensive_bassi
[root@openEuler-1 ~]# docker attach pensive_bassi
root@b2f0e4ffad5c:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@b2f0e4ffad5c:/#
exit
(2)exec命令
从Docker的1.3.0版本起,Docker提供了一个更加方便的工具exec命令,可以在运行中容器内直接执行任意命令。
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1de97b5cd5e ubuntu "/bin/bash" 14 seconds ago Up 13 seconds stoic_hugle
[root@openEuler-1 ~]# docker exec -it f1de97b5cd5e /bin/bash
root@f1de97b5cd5e:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
4、删除容器
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1de97b5cd5e ubuntu "/bin/bash" 2 minutes ago Up 2 minutes stoic_hugle
[root@openEuler-1 ~]# docker rm f1de97b5cd5e
Error response from daemon: cannot remove container "/stoic_hugle": container is running: stop the container before removing or force remove
[root@openEuler-1 ~]# docker rm -f f1de97b5cd5e
f1de97b5cd5e
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
默认情况下,docker rn命令只能删除已经处于终止或退出状态的容器,通过-f参数,Docker会先发送sigkill信号给容器,终止其中的应用,之后强行删除。
删除所有容器(不管什么状态):
docker rm -f `docker ps -aq`
5、导入和导出容器
(1)导出容器
[root@openEuler-1 ~]# s# 创建容器
[root@openEuler-1 ~]# docker run --name web -itd nginx
f7e452e122bf3651803be40052a90ac59b20b2aa4fd2ad75e08cae5b31286bcf
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7e452e122bf nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 80/tcp web
# 导出容器
[root@openEuler-1 ~]# docker export -o web_run.tar web
[root@openEuler-1 ~]# ls
anaconda-ks.cfg web_run.tar
# 复制给主机2cp web_run.tar 192.168.121.12:~
(2)导入容器
[root@openEuler-2 ~]# ls
anaconda-ks.cfg web_run.tar
[root@openEuler-2 ~]# docker import web_run.tar test/nginx:v1.0
sha256:752b509bcc8204ba4eaf87fa22d1bc4c709a6a5016f95a0214460cfbe383d90c
[root@openEuler-2 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@openEuler-2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/nginx v1.0 752b509bcc82 15 seconds ago 190MB
实际上,即可以使用docker load 命令来导入一个容器快照到本地镜像库,也可以使用docker import 命令来导入一个容器快照到本地镜像库。这两者的区别在于:容器快照文件将丢弃所有的历史记录和元数据信息(仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
6、查看容器
(1)查看容器详情
[root@openEuler-1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7e452e122bf nginx "/docker-entrypoint.…" 12 minutes ago Up 12 minutes 80/tcp web
[root@openEuler-1 ~]# docker container inspect web
[
{
"Id": "f7e452e122bf3651803be40052a90ac59b20b2aa4fd2ad75e08cae5b31286bcf",
"Created": "2025-03-08T11:34:14.241873229Z",
"Path": "/docker-entrypoint.sh",
"Args": [
"nginx",
"-g",
"daemon off;"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
...
(2)查看容器内进程
[root@openEuler-1 ~]# docker top web
UID PID PPID C STIME TTY TIME CMD
root 5908 5888 0 19:34 ? 00:00:00 nginx: master process nginx -g daemon off;
101 5950 5908 0 19:34 ? 00:00:00 nginx: worker process
101 5951 5908 0 19:34 ? 00:00:00 nginx: worker process
(3)查看统计信息
[root@openEuler-1 ~]# docker stats web
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
f7e452e122bf web 0.00% 2.387MiB / 1.394GiB 0.17% 1.23kB / 0B 0B / 16.4kB 3
7、其它容器命令
(1)复制文件-cp
示例:将本地路径data复制到test容器的/tmp路径下
docker [container] cp data test:/tmp/
(2)查看变更-diff
示例:查看test容器内的数据修改
docker [container] diff test
(3)查看端口映射-port
示例:查看test容器的端口映射情况
docker [container] port test
(4)更新配置-update
示例:限制总配额为 1s
docker update --cpu-quota 1000000 test
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)