Day 04 Docker 容器

Day 04 Docker 容器

1.容器命令

docker run 镜像id 新建容器并启动
docker ps 列出所有运行的容器 docker container list
docker rm 容器id 删除指定容器
docker start 容器id #启动容器
docker restart容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器

说明:我们有了镜像才可以创建容器,Linux,下载centos镜像来学习

docker container里面有各种各样的命令

Usage:	docker container COMMAND

Manage containers

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
.....

2.新建容器并启动

docker run [可选参数] image or docker container run [可选参数] image

参数说明

参数名称 参数作用
–name=‘Name’ 为启动的容器设置一个名字docker run --name nginx -d nginx:1.19.5
-d 以守护进程方式运行,后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080(宿主机):8080(容器)docker run -d -p 8099:80 nginx:1.19.5
-P(大写) 随机指定端口docker run -d -P nginx:1.19.5

关于-d

使用 docker run -d 在后台创建并启动名称为 centos 的容器,通过 docker ps 命令没有查找到处于运行状态的容器,通过 docker ps -a 命令查找到已经停止运行的 centos 容器。

于是疑惑产生了, -d 是保证容器在后台运行,为什么我的容器停止运行了呢?

前面提到过, docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 中有一个 COMMAND 参数,容器启动后会执行 COMMAND命令,它的默认值为 /bin/bash。也就是说容器在后台启动成功后,执行了 COMMAND 命令后直接关闭了。

了解到该原理后,我们可以通过在 docker run -d 后增加一个驻留在进程中长期运行的命令就可以保证容器不关闭了。比如死循环

docker run -d centos /bin/sh -c "while true;do echo 6666;sleep 1;done"在sh目录下循环打印 666 模拟日志

3.退出容器

[root@97b50fe359e8 /]# exit 
exit
[root@hecs-x-medium-2-linux-20201118090009 ~]# 

exit #容器直接退出
ctrl +P +Q #容器不停止退出

4.列出所有运行的容器

1.docker ps 命令

列出当前运行的容器

扫描二维码关注公众号,回复: 12218561 查看本文章
docker ps
------------------------------------------------------------------------
CONTAINER ID    IMAGE       COMMAND            CREATED       STATUS            PORTS           NAMES
faaac215cea0    centos    "/bin/bash"   23 seconds ago      Up 22 seconds                  dazzling_borg


docker ps -a  # 列出所有的容器包括 已经结束的
docker ps -a|grep nginx
------------------------------------------------------------------------
757de974c587  nginx  "/docker-entrypoint.…"  3 hours ago  Exited (0) 51 minutes ago           nginx01

docker ps -aq  # 列出所有容器的 id
docker ps -aq
------------------------------------------------------------------------
faaac215cea0
97b50fe359e8
667d29058e73
18f61570de4a
....

5.删除容器

docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker rm -f $(docker ps -aq) #删除指定的容器
docker ps -a -q|xargs docker rm #删除所有的容器

6.启动和停止容器的操作

docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止容器(id)

注意:我们在使用docker ps -a中所查看到的其实是一个个实打实 容器 他并没有 因为 run 的结束而被 销毁掉,而是被 搁置了,搁置的多了也是十分占据内存的,这些搁置的容器,给我们提供的是 提示 和 restart

7.进入当前正在运行的容器

在使用容器的过程中,我们难免需要进入容器进行排查问题。下面我们就来介绍进入容器的集中方式。

1.attach(重要)

attach 是最早 docker 官方推出的进入容器的命令了,不过使用该命令有一个问题。当多个窗口同时使用该命令 进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作,当所有窗 口退出时,容器结束。

image-20201201144845518

2.exec(重要)

既 attach 之后,exec 是官方推出的有一个新的进入容器的命令,这个命令相当于在容器中执行一个命令。

3.nsenter

需要配合 docker inspect 来使用(早期没有 exec 命令时,企业当中最长用的方式之一),Docker 是用 golang 语言开发,所以它也支持 go 语言的摸版语法。

没用过!

[root@instance-gvpb80ao docs]# nsenter --target $( docker inspect -f {
    
    {.State.Pid}}
nginxv1 ) --mount --uts --ipc --net --pid
mesg: ttyname failed: No such device
root@6f99ae8757f7:/#

4.ssh

在生产环境中排除了使用 docker attach 命令进入容器之后,相信大家第一个想到的就是 ssh。在镜像(或容器) 中安装 SSH Server,这样就能保证多人进入容器且相互之间不受干扰了,相信大家在当前的生产环境中(没有 使用 Docker 的情况)也是这样做的。但是使用了 Docker 容器之后不建议使用 ssh 进入到 Docker 容器内。

区别

docker exec #进入当前容器后开启一个新的终端,可以在里面操作。(常用)

docker attach # 进入容器正在执行的终端

8.导入与导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此时可以使用 Docker 的导人和导出功能,这也 是 Docker 自身提供的一个重要特性。

export 保存的镜像只能由import导入
save 保存的镜像只能由load导入

导出容器

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态 可以使用 docker [container] export 令,该命令格式为:

export 导出容器为镜像[export]

docker export [容器ID|容器名称]>[压缩包名称]

docker ps
--------------------------------------------
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
870a4301ce9f        centos              "/bin/bash"         7 minutes ago       Up 7 minutes                            pedantic_maxwell

docker export 870a4301ce9f>centos1.tar
--------------------------------------------

ll
--------------------------------------------
total 217148
-rw-r--r-- 1 root root 222356480 Dec  1 15:14 centos1.tar

save 导出镜像为镜像压缩包(save)

docker save [镜像id|镜像名称]>[压缩包]

image-20201201152306898

参数:

-o 指定在一个压缩包内保存多个镜像

docker save -o save_many.tar nginx hello-world centos 先写打包的名称 然后以空格隔开

docker save -o save_many.tar nginx hello-world centos
ll
--------------------------------------------
total 568224
-rw-r--r-- 1 root root         0 Dec  1 15:18 centos1.tar
-rw-r--r-- 1 root root 222366720 Dec  1 15:19 save_centos.tar
-rw------- 1 root root 359482368 Dec  1 15:32 save_many.tar

commit 将容器导出为镜像

docker commit [参数] [容器ID] [新的镜像名称]

-a : 指定维护者
-m :简介
-p :当保存容器时,容器暂停运行

导入容器

import 导入包为镜像

docker import [压缩包名称] [镜像名称:Tag]

docker import centos1.tar centos:v1
--------------------------------------------
sha256:2d82ce5bce4aac4143c7718833120855dd134f814cf15571fe114fe2aaeb4a4b

docker images
--------------------------------------------
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              v1                  2d82ce5bce4a        9 seconds ago       0B
nginx               latest              bc9a0695f571        6 days ago          133MB
centos              latest              0d120b6ccaa8        3 months ago        215MB
hello-world         latest              bf756fb1ae65        11 months ago       13.3kB

load 导入一个或多个镜像(取决于压缩包)

docker load <[压缩包名字] == dockerload -i [压缩包名字]

[root@docker ~]#docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@docker ~]# ll
total 568224
-rw-r--r-- 1 root root         0 Dec  1 15:18 centos1.tar
-rw-r--r-- 1 root root 222366720 Dec  1 15:19 save_centos.tar
-rw------- 1 root root 359482368 Dec  1 15:32 save_many.tar
[root@docker ~]# docker load < save_centos.tar 
Loaded image: centos:latest
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              0d120b6ccaa8        3 months ago        215MB

对比

save和load 与 export和import 区别?

1、save保存比较完整,export仅仅保存镜像。
2、save保存的体积大于export保存的体积(save包含了构建信息,或者缓存文件,更全面)
3、import可以重命名,load不能重命名
4、save可以保存多个镜像,export只能保存一个容器。

save和export 使用场景?

1、打包镜像一般用save, 打包容器一般用export
2、需要构建历史信息的,可以使用save。

docker export 和 docker commit 区别?

1、docker export导出的是压缩包
2、docker commit导出为镜像

9.常用其他命令

1.后台启动命令

# 命令 docker run -d 镜像名
➜ ~ docker run -d centos
a8f922c255859622ac45ce3a535b7a0e8253329be4756ed6e32265d2dd2fac6c
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
# 问题docker ps. 发现centos 停止了
# 常见的坑,docker容器使用后台运行,就必须要有要一个前台进程,docker发现没

2.查看日志

docker logs --help
Options:
--details Show extra details provided to logs
* -f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or
relative (e.g. 42m for 42 minutes)
* --tail string Number of lines to show from the end of the logs
(default "all")
* -t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37)
or relative (e.g. 42m for 42 minutes)
➜ ~ docker run -d centos /bin/sh -c "while true;do echo 6666;sleep 1;done" #模
拟日志
#显示日志
-tf #显示日志信息(一直更新)
--tail number #需要显示日志条数
docker logs -t --tail n 容器id #查看n行日志
docker logs -ft 容器id #跟着日志

3.查看容器中进程信息 ps

docker top 容器id

4.查看镜像的元数据

# 命令
docker inspect 容器id
#测试
➜ ~ docker inspect 55321bcae33d
[
{
    
    
"Id":
"55321bcae33d15da8280bcac1d2bc1141d213bcc8f8e792edfd832ff61ae5066",
"Created": "2020-05-15T05:22:05.515909071Z",
"Path": "/bin/sh",
...
}

10.把容器 内容 拷贝到主机上

.当前目录

docker cp 容器id:容器内路径 主机目的路径

docker cp 2ad9bd2e9f03:/home/Test/. /home/.

image-20201202203340379

docker cp 主机文件路径 容器id:容器内部路径

image-20201202195056422

容器指令总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JF1R0H5j-1606915442190)(https://gitee.com/A1L19/PicGO/raw/master/PicGo/image-20201201160011696.png)]

猜你喜欢

转载自blog.csdn.net/A1L__/article/details/110500127
今日推荐