docker 容器操作

创建并启动容器

命令格式

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS

锚点

--name="容器新名字":为容器指定一个名称;

-i:以交互模式运行容器,通常与-t或者-d同时使用;

-t:为容器重新分配一个伪输入终端,通常与-i同时使用;

-d: 后台运行容器,并返回容器ID;

-P: 随机端口映射,容器内部端口随机映射到主机的端口

-p: 指定端口映射,格式为:主机(宿主)端口:容器端口

-v: 挂载宿主机的一个目录, 格式为:本机文件目录:容器中的文件目录

启动普通容器

docker run --name 别名 镜像ID  

启动交互式容器

#运行一个容器,取别名,交互模式运行,以及分配一个伪终端
docker run -it --name 别名 镜像ID

启动容器并执行/bin/bash命令

直接操作容器,执行完 回到 宿主主机终端

 docker run -it --name 别名 镜像ID /bin/bash命令

守护式方式创建并启动容器

也就是后台启动

docker run -di --name 别名 镜像ID 

例:启动交互式容器centos7

docker run -it --name mycentos01 8652b9f0cb4c

image-20210105112347087

例:守护式方式创建并启动容器centos7

docker run -di --name mycentos3 8652b9f0cb4c

image-20210105134819521

例:启动容器并执行/bin/bash命令

docker run -it --name mycentos4 8652b9f0cb4c ls -al

如图,进入容器就执行命令

image-20210105135739074

列出容器

命令格式

docker ps [OPTIONS]

OPTIONS

-a :显示所有的容器,包括未运行的。

-f :根据条件过滤显示的内容。

--format :指定返回值的模板文件。

-l :显示最近创建的容器。

-n :列出最近创建的n个容器。

--no-trunc :不截断输出。

-q :静默模式,只显示容器编号。

-s :显示总的文件大小。

常用查询

docker ps 查看正在运行的容器

docker ps -a 查看所有容器

docker ps -n 2  显示最近创建的2个容器

docker ps -f status=exited 查看停止的容器

image-20210105114008901

退出容器

容器停止退出

#输入字符
exit

image-20210105114246371

再查看没有容器正在运行

image-20210105114330436

容器不停止退出

#按键盘
ctrl+P+Q

image-20210105114646059

再查看还是在运行

image-20210105114740019

进入容器

docker attach 容器ID or 容器名

例:

docker attach d5446fab8b23

image-20210105115102482

启动容器

docker start 容器ID or 容器名

例:

docker start d5446fab8b23

image-20210105115214495

重启容器

docker restart 容器ID or 容器名

例:

docker restart d5446fab8b23

image-20210105115401063

重启的时间可能会久一点

删除容器

删除单个容器

docker rm 容器ID 

删除多个容器

#中间空格隔开
docker rm -f 容器ID1 容器ID2 

删除所有容器

docker rm -f $(docker ps -qa)

强制删除容器

如果删除正在运行的容器,会报错,我们假如需要删除的话,需要强制删除

即加上-f参数

例:

docker rm d5446fab8b23

image-20210105115837671

进入正在运行的容器执行命令

docker exec -it 容器名称 或者 容器ID 执行命令

直接操作容器,执行完 回到 宿主主机终端

我们一般用于 启动容器里的应用 比如 tomcat nginx redis

例:

 docker exec -it 638d16c99863 ls -a
 docker exec -it 638d16c99863 /bin/bash    

注意容器一定要是已经启动了的,否则会报错

image-20210105140729976

查看容器日志

命令格式

docker logs [OPTIONS] CONTAINER

OPTIONS

--details        显示更多的信息

-f, --follow     跟踪实时日志

--since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)

--tail string    从日志末尾显示多少行日志, 默认是all

-t, --timestamps 显示时间戳

--until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

上面这种方式不推荐,推荐直接去相应的目录看即可

进入目录查看的方式

日志目录:/var/lib/docker/containers/

image-20210105143320927

每个容器对应一堆文件,然后有个log结尾的,就是日志文件

image-20210105143437895

查看容器进程

docker top 容器ID

例:

docker top 638d16c99863

image-20210105143923051

宿主机和容器之间文件拷贝

宿主机拷贝到容器内

docker cp 需要拷贝的文件或者目录 容器名称:容器目录

例:

#将宿主机 /home/makalo/test.png 复制到容器d68122a6e441中的/tmp目录下
docker cp /home/makalo/test.png d68122a6e441:/tmp/

#将宿主机 /home/makalo/test.png 复制到容器d68122a6e441中的/tmp目录下并改为test_change_name.png
docker cp /home/makalo/test.png d68122a6e441:/tmp/test_change_name.png

#将宿主机的 /home/makalo/test_cp 文件夹复制到容器d68122a6e441中的/tmp目录下
docker cp /home/makalo/test_cp d68122a6e441:/tmp/

image-20210105150641505

容器拷贝到宿主机

docker cp 容器名称:容器目录 宿主机目录

例:

#将容器d68122a6e441的/tmp/test.png 文件 拷贝到宿主机的/home/makalo/cp_data/目录下
docker cp d68122a6e441:/tmp/test.png /home/makalo/cp_data/

#将容器d68122a6e441的/tmp/test.png 文件 拷贝到宿主机的/home/makalo/cp_data/目录下并改名test2.png
docker cp d68122a6e441:/tmp/test.png /home/makalo/cp_data/test2.png

#将容器d68122a6e441的/tmp/test_cp文件夹 拷贝到宿主机的/home/makalo/cp_data/目录下
docker cp d68122a6e441:/tmp/test_cp /home/makalo/cp_data/

image-20210105151311340

容器宿主机端口映射

当容器中运行一些网络应用,要让外部访问这些应用时,可以通过 -P 或 -p 参数两种方式来指定端口映射。关于 -P 或 -p可以查看

命令格式

#指定端口映射
docker run -it -p 主机(宿主)端口:容器端口 镜像名称或镜像id
##随机端口映射
docker run -it -P 镜像名称或镜像id

例:启动apache容器映射

没有镜像就先pull

docker run -it -d -p 80:80  --name apache httpd

浏览器访问

image-20210105165530872

提交运行时容器成为镜像

命令格式

docker commit -a='作者' -m='备注' 运行时容器ID 新镜像名称

例:将运行时的apache提交为镜像

docker commit -a='makalo/apache' -m='test' 9278fe7375c0 makalo/apache:1.0

具体步骤

先启动并进入容器的内

docker run -it -p 80:80  --name apache httpd /bin/bash

image-20210105171100870

可以看到容器内有一些目录 而index.html 就在 htdocs 目录中

这时候浏览器访问

image-20210105172855296

一切正常

编辑index.hmlt

echo '<html><body><h1>the change!</h1></body></html>' > htdocs/index.html

image-20210105174541499

提交为镜像

docker commit -a='makalo/apache' -m='test' 9278fe7375c0 makalo/apache:1.0

image-20210105164252408

使用该镜像启动容器

 docker run -it -p 8888:80  --name myApache 572b7a1b7628 /bin/bash

查看index.html文件

image-20210105174834406

可以看到该文件内容是被修改后的

查看容器元信息

docker inspect 容器ID

例:

docker inspect c90f247595e8

image-20210105185350031

容器目录挂载

参考:https://www.cnblogs.com/makalochen/p/14241052.html

posted @ 2021-01-05 18:55  makalo  阅读(255)  评论(0编辑  收藏  举报