ls帮助命令

  1. docker version 查看版本
  2. docker info 查看docker具体信息
  3. docker --help 查看帮助命令

镜像命令

查看镜像

image.png

搜索镜像

image.png

docker search --no-trunc tomcat                    //--no-trunc是option

image.png

下载镜像

tag默认是latest
image.png

删除镜像

tag默认是latest
image.png

思考:commit和docker文件大小

  1. 关于push

image.png
对由镜像生成的实例容器进行自定义的修改以符合自身环境的需求,之后又把这个容器复刻为新的镜像,这就需要使用docker commit

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
  1. 为什么docker的tomcat镜像要远大于Windows版本下的Tomcat?为什么centos要远小于从官网下载的大小?
    • 对于docker里的tomcat是一个容器,它不仅仅包含tomcat自身的文件,还有为其服务的下层:kernel,centos的roofs,jdk等。所以他的大小是容器层和镜像层之和。而对于Windows版本下的tomcat只需要负责tomcat自身的文件即可,为其服务的下层已经在本机下载好
    • 对于docker里的centos,它所要下载的仅仅是kernel和rootfs。由于docker的共享机制,若之前镜像下载过kernel,则此次下载就只需要centos的roofs即可,且rootfs是关于centos的必要的文件,所以它的大小要小于官网下载的大小

image.png
image.png
例如:对于不同版本的mysql,比如mysql8.0,mysql5.5,mysql5.7他们的镜像层可以共享,需要下载加载的仅仅是容器层。当之前下载过mysql5.5的镜像后,再下载mysql5.7镜像就会很快,因为共享了镜像层,下载加载的仅仅是5.7版本的容器层
image.png

容器命令

举例先拉去centos镜像
image.png

创建容器

image.png

options

  1. -i 和 -t,启动交互式进程 ```bash

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

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

例如:docker run -i -t 5d0da3dc9764
可简写为: docker run -it 5d0da3dc9764(或镜像名) 此处没有指定容器名字

![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636103004200-3f5d9d27-22df-4776-be7b-356b9bcf0dee.png#clientId=u46be3c6d-7b27-4&from=paste&height=184&id=u5166e37d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=367&originWidth=1343&originalType=binary&ratio=1&size=115420&status=done&style=none&taskId=u130e3314-7d2a-4f7b-97b3-23742833144&width=671.5)

2. --name给容器命名
   - 用docker images 查看镜像ID和镜像名

![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636103531114-a19d8a1b-cb5c-41b5-87e8-a311ff2a6607.png#clientId=u46be3c6d-7b27-4&from=paste&height=92&id=ubfa3a4af&margin=%5Bobject%20Object%5D&name=image.png&originHeight=184&originWidth=793&originalType=binary&ratio=1&size=32351&status=done&style=none&taskId=ubce9b280-2d08-4e84-b4b9-8ed4d2b3d92&width=396.5)
```bash
--name="容器新名字": 为容器指定一个名称;不分配则docker使用随机分配名

例如:
sudo docker run -it  5d0da3dc9764        //未容器命名,用镜像ID
sudo docker run -it  centos                //未容器命名,用镜像名
sudo docker run -it --name c2 centos                //给容器命名,且用镜像名
sudo docker run -it --name c1 5d0da3dc9764            //给容器命名,且用镜像ID

如下图:

image.png


  1. 启动守护式容器 ```bash -d: 后台运行容器,并返回容器ID,也即启动守护式容器; 这与之前的-it是对立的

sudo docker run -it -d —name c1 centos //给容器命名,且指定镜像名

![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636113764959-619df8db-f5db-4c4c-aee2-b042c0a90ae5.png#clientId=u46be3c6d-7b27-4&from=paste&id=ud3e8bebd&margin=%5Bobject%20Object%5D&name=image.png&originHeight=402&originWidth=1291&originalType=binary&ratio=1&size=356368&status=done&style=none&taskId=ubf488274-d1ab-46fa-8c87-6225cad24b6)

   - 上面是守护式容器,下面介绍交互式容器

![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636101857707-c8154d14-97ea-4123-9dc4-f9624a62b2c1.png#clientId=u46be3c6d-7b27-4&from=paste&id=Ve7g0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=273&originWidth=887&originalType=url&ratio=1&size=24836&status=done&style=none&taskId=u8aa05b96-5962-4665-84d1-827e09de8d2)

4. 指定端口号
```bash
-P: 随机端口映射;

-p: 指定端口映射,有以下四种格式

      ip:hostPort:containerPort

      ip::containerPort

      hostPort:containerPort

      containerPort
  • 使用-p 8888:8080 自定义端口对应 ```bash docker run -it -p 8888:8080 tomcat

启动tomcat后,ping www.localhost:8080,观察是否可以ping通


- 使用-P  分配随机端口
<a name="C3zOs"></a>
## ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636167629613-f2d7f1cd-c4fb-4828-863e-8a3cf5e71729.png#clientId=u2395b4fd-b935-4&from=paste&height=144&id=ir3IO&margin=%5Bobject%20Object%5D&name=image.png&originHeight=192&originWidth=507&originalType=binary&ratio=1&size=20684&status=done&style=none&taskId=u90513859-b83f-4fbb-bf0c-f136d13fe98&width=380)

---

<a name="owGRh"></a>
## 查看容器
![image.png](https://cdn.nlark.com/yuque/0/2021/png/22137958/1636102532927-85e61024-cfcc-4e5e-8909-a1fb42dc3ab8.png#clientId=u46be3c6d-7b27-4&from=paste&height=75&id=u0a0abead&margin=%5Bobject%20Object%5D&name=image.png&originHeight=149&originWidth=1407&originalType=binary&ratio=1&size=76181&status=done&style=none&taskId=u4fbafcab-1abd-46c8-b763-83cc8a687ae&width=703.5)
```bash
OPTIONS说明(常用):

-a :列出当前所有正在运行的容器+历史上运行过的

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

-n:显示最近n个创建的容器。
sudo docker ps -n 3                回看3条

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

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

退出容器

不停止退出后怎么返回到容器里面?
image.png

重新进入

1. docker exec -it 容器ID bashShell
2. 重新进入docker attach 容器ID

上述两个区别:
attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程

启动容器

docker start b012d5b5609b
或
docker start mycentos        //根据容器名
//启动成功后返回容器ID或容器名

image.png

重启容器

docker restart b012d5b5609b
或
docker restart mycentos        //根据容器名
//重启成功后返回容器ID或容器名

停止容器

docker stop b012d5b5609b
或
docker stop mycentos        //根据容器名
//删除成功后返回容器ID或容器名

强制停止容器

docker kill b012d5b5609b
或
docker kill mycentos        //根据容器名
//停止成功后返回容器ID或容器名

删除已停止容器

docker rm b012d5b5609b
或
docker rm mycentos        //根据容器名
//停止成功后返回容器ID或容器名

rmi是删除镜像


docker rm -f b012d5b5609b            f:force强制
  • 使用内嵌语句进行多个容器删除
    docker rm -f $(docker ps -a -q)
    等价于
    docker ps -a -q | xargs docker rm                //把前面的结果作为参数xargs通过管道符放入后面语句
    

重要概念

守护式容器

查看容器日志

docker logs -f -t --tail 容器ID

* -t 是加入时间戳
* -f 跟随最新的日志打印
* --tail 数字 显示最后多少条
  • 创建守护式容器,在后台启动,并写入输出语句:每隔两秒钟打印一句话

image.png

  • 输入命令查看后台运行的容器的日志

image.png

查看容器内运行的进程

docker top 容器ID

image.png

查看容器内细节

docker inspect 容器ID

进入正在运行的容器并以命令行交互

1. docker exec -it 容器ID /bin/bash
2. 重新进入docker attach 容器ID

上述两个区别:
attach 直接进入容器启动命令的终端,不会启动新的进程
exec 是在容器中打开新的终端,并且可以启动新的进程,exec可以不进入容器达到操作容器目的,如下图

image.png

从容器内拷贝文件到主机上

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

image.png

总结

image.png

attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像
build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像
commit    Create a new image from a container changes   # 提交当前容器为新的镜像
cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
diff      Inspect changes on a container’s filesystem   # 查看 docker 容器变化
events    Get real time events from the server          # 从 docker 服务获取容器实时事件
exec      Run a command in an existing container        # 在已存在的容器上运行命令
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history   Show the history of an image                  # 展示一个镜像形成历史
images    List images                                   # 列出系统当前镜像
import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      Display system-wide information               # 显示系统相关信息
inspect   Return low-level information on a container   # 查看容器详细信息
kill      Kill a running container                      # kill 指定 docker 容器
load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
logout    Log out from a Docker registry server          # 从当前 Docker registry 退出
logs      Fetch the logs of a container                 # 输出当前容器日志信息
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
pause     Pause all processes within a container        # 暂停容器
ps        List containers                               # 列出容器列表
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
restart   Restart a running container                   # 重启运行的容器
rm        Remove one or more containers                 # 移除一个或者多个容器
rmi       Remove one or more images             # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run       Run a command in a new container              # 创建一个新的容器并运行一个命令
save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像
start     Start a stopped containers                    # 启动容器
stop      Stop a running containers                     # 停止容器
tag       Tag an image into a repository                # 给源中镜像打标签
top       Lookup the running processes of a container   # 查看容器中运行的进程信息
unpause   Unpause a paused container                    # 取消暂停容器
version   Show the docker version information           # 查看 docker 版本号
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值