Docker学习——容器

        容器是 Docker 的另一个核心概念,简单来说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。

创建容器

1新建容器

可以使用 docker create 令新建一个容器,例如:
[root@openEuler-node1 ~]# docker create busybox
c3e7310fa21a4a2d94b0bf6f881aed4fc8482d3d23a341f9563ce65c8027fd19

2启动容器

使用 docker [container] start 来启动一个已经创建的容器例如,启动创建的busybox容器
[root@openEuler-node1 ~]# docker start c3e7310fa21a
c3e7310fa21a

3新建并启动容器

[root@openEuler-node1 ~]# docker run ubuntu /bin/echo 'Hello world'
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete 
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:latest
Hello world

注意:如果新建容器没有这个镜像会先拉取镜像再启动容器最后执行指令。 

其中,-t选项让 Docker 分配一个伪终端( pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。更多的命令选项可以通过 man docker-run 命令来查看
[root@openEuler-node1 ~]#  docker run -it ubuntu:lB .04 /bin/bash 
root@afBbae53bdd3 /#

用户可以输入exit或者Ctrl+D退出

对于所创建的 bash 容器,当用户使用 exit 命令退出 bash 进程之后,容器也会自动退出这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的 必要了。

4守护态运行

更多的时候,需要让 Docker 容器在后台以守护态( Daemonized )形式运行 此时,可以 通过添加-d 参数来实现。
[root@openEuler-node1 ~]# docker run -d mysql:5.7 --name db 
e7d8bcac87cddc1299f7a71879bece14c5d38d7d5257be03dd312d6d19c9ddb2

5查看容器输出

要获取容器的输出信息,可以通过 docker [container] logs命令。
[root@openEuler-node1 ~]# docker logs sql 
2024-03-11 11:09:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
2024-03-11 11:09:22+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2024-03-11 11:09:22+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
2024-03-11 11:09:23+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
    You need to specify one of the following as an environment variable:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD

这里启动mysql报错也是非常常见的错误,因为需要初始root密码

 

 停止容器

1暂停容器

可以使用 docker [container] pause CONTAINER [CONTAINER ... ]命令来暂 停一个运行中的容器。
[root@openEuler-node1 ~]# docker pause test 
test
[root@openEuler-node1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
87151b0e6fe7        ubuntu              "bash"              35 seconds ago      Up 34 seconds (Paused)                       test

 可以用unpause 恢运行态

[root@openEuler-node1 ~]# docker unpause test 
test
[root@openEuler-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
87151b0e6fe7        ubuntu              "bash"              2 minutes ago       Up 2 minutes                            test

2终止容器

可以使用 docker [container] stop 来终止一个运行中的容器 该命令的格式为
docker [container] stop [-t I - -time [=10]] [CONTA NER ...]
[root@openEuler-node1 ~]# docker stop test 
test

重启容器

[root@openEuler-node1 ~]# docker restart test

3进入容器

在使用-d 参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行
操作 这个时候如果需要进入容器进行操作,推荐使用官方的 attach或 exec 命令
[root@openEuler-node1 ~]# docker run -itd ubuntu
b0613bfdcbe14f88138ed030f37907356069142bc755fa7a2ce33749385894dd
[root@openEuler-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b0613bfdcbe1        ubuntu              "bash"              4 seconds ago       Up 3 seconds                            boring_wescoff
然而使用 attach 命令有时候并不方便 当多个窗口同时 attach 到同一个容器的时 候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
[root@openEuler-node1 ~]# docker attach b0613bfdcbe1
root@b0613bfdcbe1:/# 
.exec 命令就比较方便,可以多窗口运行
[root@openEuler-node1 ~]# docker exec -it 685af6f5c5b9 bash
root@685af6f5c5b9:/# w
 11:25:37 up  8:16,  0 users,  load average: 0.00, 0.01, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
通过指定 it 参数来保持标准输入打开,并且分配 一个伪终端通过 exec 命令对
容器执行操作是最为推荐的方式

 4删除容器

可以使用 docker [container) rm 命令来删除处于终止或退出状态的容器,命令格式为
docker [container] rm
  • - f, --force=false 是否强行终止并删除一个运行中的容器
  • - i, --link=false :删除容器的连接 ,但保留容器;
  • - v, --volumes=false :删除容器挂载的数据卷
[root@openEuler-node1 ~]# docker rm -f `docker ps -qa`
685af6f5c5b9
b0613bfdcbe1

利用反引号实现docker中容器的批量删除 

5导入和导出容器

导出

docker [container] export [-o l - -output [=””] ] CONTAINER

其中,可以通过-o  选项来指定导出的 t ar 文件名,也可以直接通过重定向来实现 首先,查看所有的容器,如下所示:
[root@openEuler-node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
4d44b708c81b        ubuntu:latest       "bash"              6 seconds ago        Exited (0) 5 seconds ago                            admiring_lamarr
015c53d29ae3        ubuntu:18.04        "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       romantic_burnell
[root@openEuler-node1 ~]# docker export -o test_for_run.tar 4d44b708c81b
[root@openEuler-node1 ~]# ls
anaconda-ks.cfg  dockerfile  test_for_run.tar  ubuntu_18.04.tar

导入 

导出的文件又可以使用 docker [ container ] import 命令导人变成镜像,该命令格式为
docker import [-c  |  --change  [ = [ ]]]   [-m |  -- message[=MESSAGE]] filelURLI- [REPOSITORY [:TAG]]
下面将导出的 test_ for_ run. tar 文件导人到系统中:
[root@openEuler-node1 ~]# docker import test_for_run.tar  test/ubuntu:v1.0
sha256:aec871a8dd332ba4dc0828da48022c7f2e74111ca4cdd53da6700eec8703ca35

查看容器

1查看容器详情

[root@openEuler-node1 ~]# docker  inspect  4d44b708c81b

就一条命令,可以根据容器的ID或名字看

2查看容器内进程

[root@openEuler-node1 ~]# docker top test 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                11103               11087               0                   19:43               pts/0               00:00:00            sh

3查看统计信息

[root@openEuler-node1 ~]# docker stats test 

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
823457ad116b        test                0.00%               144KiB / 3.297GiB   0.00%               946B / 0B           0B / 0B 

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值