Bootstrap

4.Docker容器命令

Docker镜像与容器的理解

        在学习docker入门过程中有些时候容易把容器和镜像这两个概念记混淆;下面说下我自己的理解不对望指正!有镜像才能创建容器这是根本前提!IMAGE镜像就好比我们的Java实体工程代码;在服务器上这套Java实体代码可以运行启动多份工程。依靠Java实体代码启动的一个个工程就相当于是容器;

准备工作:

        使用docker pull ubuntu命令拉取一个最新的ubuntu镜像;使用docker pull redis:6.0.8拉取一个指定版本号为6.0.8的Redis镜像,下面容器相关操作都使用这两个镜像进行学习;

作为例子;

1.新建启动容器[docker run]

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

常用的参数:

● --name:为容器指定一个名称
● -d:后台运行容器并返回容器ID,也即启动守护式容器(比如后台启动Redis、Mysql...)
● -i:以交互模式(interactive)运行容器,通常与-t同时使用
● -t:为容器重新分配一个伪输入终端(tty),通常与-i同时使用。也即启动交互式容器(前台有伪终端,等待交互)
● -e:为容器添加环境变量
● -P:随机端口映射。将容器内暴露的所有端口映射到宿主机随机端口
● -p:指定端口映射

-p指定端口映射的几种不同形式:

● -p hostPort:containerPort:端口映射,例如-p 8080:80
● -p ip:hostPort:containerPort:配置监听地址,例如 -p 10.0.0.1:8080:80
● -p ip::containerPort:随机分配端口,例如 -p 10.0.0.1::80
● -p hostPort1:containerPort1 -p hostPort2:containerPort2:指定多个端口映射,例如-p 8080:80 -p 8888:3306

例:

采用交互模式启动ubuntu系统并为该容器取名为myUbuntu01;

# -i 交互模式
# -t 分配一个伪输入终端tty

# --name=容器名称 为启动好的容器指定一个名称
# ubuntu 镜像名称
# /bin/bash(或者bash) shell交互的接口
docker run -it --name=myUbuntu01 ubuntu /bin/bash

2.列出正在运行的容器[docker ps]

docker ps [OPTIONS]
● -a:列出当前所有正在运行的容器+历史上运行过的容器
● -l:显示最近创建的容器
● -n:显示最近n个创建的容器
● -q:静默模式,只显示容器编号

例:

显示最近创建的5个容器;        

# -n 后面指定显示容器的个数

docker ps -n 5

3.退出容器

        执行docker run 命令启动的容器有两种退出方式;

方式一:

        执行exit;

注意:

        执行exit;命令退出,容器会停止;

方式二:

        ctrl + p + q;退出,容器不会停止;

4.启动停止运行的容器[docker start]

     docker start 容器ID/名字

5.重启容器[docker restart]

docker restart 容器ID/名字

6.停止容器[docker stop]

docker stop 容器ID/名字

7.强制停止容器[docker kill]

docker kill 容器ID/名字

8.删除容器[docker rm]

# 删除已停止运行的容器

docker rm 容器ID/名字

# 强制删除容器(不管容器有没有停止)

docker rm -f 容器ID/名字

9.查看容器日志[docker logs]

# 查看容器日志

docker logs 容器ID/名字

10.查看容器内运行的进程[docker top]

# 查看容器内运行的进程

docker top 容器ID/名字

11.查看容器内部细节[docker inspect]

# 比如查看容器内部的I网关、IP、网桥、容器卷等信息

docker inspect 容器ID/名字

12.进入运行中的容器并以命令行交互

# 方式一(推荐)

docker exec -it 容器ID/名称 bin/bash

# 方式二

docker attach 容器ID/名称

两者区别:

        1.exec是在容器中打开一个新的终端,并且启动新的进程,使用exit;命令退出容器时不会

           停止容器;

        2.attach是直接进入容器启动命令的终端,使用exit;命令退出时会导致容器停止;

小结

        工作中推荐使用docker exec命令进入正在运行的容器,因为使用exit;退出时不会停止容器;

13.重容器内拷贝文件到宿主机[docker cp]

# 将容器中的文件拷贝到宿主机

docker cp 容器ID:容器文件路径 拷贝到宿主机路径

# 例如

        将ID为cf6077b1a7e3的容器中的/data/myTest.txt文件拷贝到宿主机中的/data目录

docker cp cf6077b1a7e3:/data/myTest.txt /data

14.导出导入容器[docker export 或 docker import]

导出:

# 导出整个容器内容(用于备份容器或将备份的容器发送给其他服务器去运行)

docker export 容器ID > 文件名.tar

如:

docker export 1ba9f53257e1 > MyRedis.tar

说明:

        导出是连同容器中的数据一起导出比如Redis中的数据也一起导出;

导入:

# 从tar包中的内容创建一个新的文件系统再导入为镜像

cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

如:

cat MyRedis.tar | docker import - pyb/redis:6.0.8

说明:

        导入之后会生成一个名为pyb/redis的镜像;

;