Skip to content

二、镜像、容器

1、常见命令

所有Docker命令手册:https://docs.docker.com/engine/reference/commandline/docker/

命令作用
attach绑定到运行中容器的 标准输入, 输出,以及错误流(这样似乎也能进入容器内容,但是一定小心,他们操作的就是控制台,控制台的退出命令会生效,比如redis,nginx...)
build从一个 Dockerfile 文件构建镜像
commit把容器的改变 提交创建一个新的镜像
cp容器和本地文件系统间 复制 文件/文件夹
create创建新容器,但并不启动(注意与docker run 的区分)需要手动启动。start\stop
diff检查容器里文件系统结构的更改【A:添加文件或目录 D:文件或者目录删除 C:文件或者目录更改】
events获取服务器的实时事件
exec在运行时的容器内运行命令
export导出容器的文件系统为一个tar文件。commit是直接提交成镜像,export是导出成文件方便传输
history显示镜像的历史
images列出所有镜像
import导入tar的内容创建一个镜像,再导入进来的镜像直接启动不了容器。/docker-entrypoint.sh nginx -g 'daemon o?;' docker ps --no-trunc 看下之前的完整启动命令再用他
info显示系统信息
inspect获取docker对象的底层信息
kill杀死一个或者多个容器
load从 tar 文件加载镜像
login登录Docker registry
logout退出Docker registry
logs获取容器日志;容器以前在前台控制台能输出的所有内容,都可以看到
pause暂停一个或者多个容器
port列出容器的端口映射
ps列出所有容器
pull从registry下载一个image 或者repository
push给registry推送一个image或者repository
rename重命名一个容器
restart重启一个或者多个容器
rm移除一个或者多个容器
rmi移除一个或者多个镜像
run创建并启动容器
save把一个或者多个镜像保存为tar文件
search去docker hub寻找镜像
start启动一个或者多个容器
stats显示容器资源的实时使用状态
stop停止一个或者多个容器
tag给源镜像创建一个新的标签,变成新的镜像
top显示正在运行容器的进程
unpausepause的反操作
update更新一个或者多个docker容器配置
versionShow the Docker version information
container管理容器
image管理镜像
network管理网络
volume管理卷

根据正在运行的容器制作出相关的镜像:反向

根据镜像启动一个容器:正向

有了Docker:

1、先去软件市场搜镜像:https://registry.hub.docker.com/ docker hub

2、下载镜像 docker pull xxx

3、启动软件 docker run 镜像名;

对于镜像的所有管理操作都在这一个命令:docker image --help

image-20210628114804321

1、docker ps

sh
# 查看容器
docker ps
# 查看停止的容器
docker ps -f status=exited
# 查看所有容器(包括运行和停止)。
docker ps -a
# 查看最后一次运行的容器。
docker ps -l
# 列出最近创建的 n 个容器。
docker ps -n 5

2、docker images

sh
# 列出所有镜像
docker images

3、docker pull

sh
# 以redis为例
docker pull redis

# 不写标签相当于
docker pull redis:latest(最新版)

4、docker create

sh
# 创建容器
docker create --name myredis -p 6379:6379 redis
docker create --name myredis -p 6379(主机的端口):6379(容器的端口) redis

https://docs.docker.com/engine/reference/commandline/create/

5、docker start

sh
# 用create创建的容器要用start启动
docker start 容器名或者容器id
docker start myredis

6、docker stop

sh
# 停止容器
docker stop 容器名或者容器id
docker stop myredis

7、docker restart

sh
# 重启容器
docker restart 容器名或者容器id
docker restart myredis

8、docker rm

sh
# 删除容器
docker rm 容器名或者容器id

# 强制删除
docker rm -f 容器名或者容器id

# 删除全部容器
docker rm -f $(docker ps -aq)

9、docker rmi

sh
# 删除镜像
docker rmi 镜像名或者镜像id

# 强制删除
docker rmi -f 镜像名或者镜像id

# 删除全部镜像
docker rmi -f $(docker images -aq)

10、docker kill

sh
# 强制停止容器
docker kill 容器名或者容器id

11、docker port

sh
# 查看容器端口映射
docker port 容器名或者容器id
docker port myredis

12、docker logs

sh
# 查看容器运行日志
docker logs 容器名或者容器id
docker logs myredis

# 实时查看
docker logs -f myredis

# 查看最后100 行日志
docker logs -f --tail 100
docker logs -f --tail 100 myredis

# 查看最近30分钟的日志
docker logs --since 30m myredis

# 查看时间段日志
docker logs -t --since="2021-11-01" --until "2021-11-05" myredis

13、docker rename

sh
# 重命名容器
docker rename 容器名 新容器名
docker rename myredis redis

14、docker stats

sh
# 查看容器资源的实时使用状态
docker stats 容器名或者容器id

15、docker update

sh
# 更新容器配置
# 更新容器为开机自启
docker update 容器名或者容器id --restart=always

16、docker tag

sh
# 给镜像重新打标签
docker tag 原镜像:标签 新镜像名:标签

17、docker prune

sh
# 移除游离镜像 dangling:游离镜像(没有镜像名字的)
docker image prune

# 清理docker system
docker system prune

18、docker pause

sh
# 暂停容器
docker pause 容器名或者容器id

19、docker unpause

sh
# 启动已暂停的容器
docker unpause 容器名或者容器id

20、docker inspect

sh
# 查看镜像详细信息
docker inspect 镜像id或者镜像名

# 查看容器详细信息
docker container inspect 容器名或者容器id

# network volume等等都可以查看
docker inspect image/network/volume ....

21、docker exec

sh
# 进入容器
docker exec -it 容器名或者容器id /bin/bash

# 0用户,以特权方式进入容器
docker exec -it -u 0:0 --privileged myredis /bin/bash

https://docs.docker.com/engine/reference/commandline/exec/

22、docker attach

sh
# 进容器 绑定的是控制台. 可能导致容器停止。不要用这个
docker attach

23、docker export、import

sh
# 导出镜像
docker export 导出的文件被import导入以后变成镜像,并不能直接启动容器,需要知道之前的启动命令
docker export -o nginx.tar 容器id
docker import nginx.tar mynginx:v6
(docker ps --no-trunc),然后再用下面启动。
docker run -d -P mynginx:v6 /docker-entrypoint.sh nginx -g 'daemon off;'
或者docker image inspect 看之前的镜像,把 之前镜像的 Entrypoint的所有和 Cmd的连接起来就
能得到启动命令

24、docker save、load

sh
docker save -o busybox.tar busybox:latest 把busybox镜像保存成tar文件
docker load -i busybox.tar  把压缩包里面的内容直接导成镜像

25、docker commit

sh
# 一般运行中的容器会常年修改,我们要使用最终的新镜像,把新的镜像放到远程docker hub,方便后来在其他机器下载
docker commit -a xueqimiao -m "first commit" mynginx4 mynginx:v4
# 会产生游离镜像

image-20210628114817774

2、典型命令

1、docker run

  • -d: 后台运行容器,并返回容器ID
  • -i: 以交互模式运行容器,通常与 -t 同时使用
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p:指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
  • --name="nginx-lb":为容器指定一个名称
  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h "mars": 指定容器的hostname;
  • -e username="ritchie": 设置环境变量
  • --env-file=[]: 从指定文件读入环境变量;
  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行
  • -m :设置容器使用内存最大值
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
  • --link=[]: 添加链接到另一个容器;
  • --expose=[]: 开放一个端口或一组端口;
  • --restart , 指定重启策略,可以写--restart=awlays 总是故障重启
  • --volume , -v: 绑定一个卷。一般格式 主机文件或文件夹:虚拟机文件或文件夹

1、重启策略

no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容

2、docker exec

sh
# 进入容器
docker exec -it 容器名或者容器id /bin/bash

# 0用户,以特权方式进入容器
docker exec -it -u 0:0 --privileged myredis /bin/bash

3、docker build

sh
docker build -t imageName -f DockerfileName . 

# 不带缓存构建
docker build --no-cache

3、容器的状态

Created(新建)、Up(运行中)、Pause(暂停)、Exited(退出)