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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐