Docker常用命令篇

248 阅读6分钟

Docker常用命令篇

其实,在命令行输入docker 就可以看到所有命令的

docker logs dockerID 查看日志

1. 镜像image相关

1.1. 查看本机所有镜像

# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
  1. repository:镜像在仓库中的名称
  2. TAG:镜像标签(一般我们写软件的版本号)
  3. IMAGE ID:镜像ID
  4. CREATED:镜像创建的日期(不是获取该镜像的日期)
  5. SIZE:镜像的大小

1.2. 搜索镜像

# docker search 镜像名
NAME     DESCRIPTION       STARS     OFFICIAL   AUTOMATED
  1. NAME:镜像名称
  2. DESCRIPTION:镜像描述
  3. STARS:星星数量,or点赞数量
  4. OFFICIAL:是否官方构建
  5. AUTOMATED:自动构建(是否是Docker Hub 自动构建流程创建的)

其实也可以通过 hub.docker/com 直接进行镜像搜索

1.3. 拉取镜像

# docker pull 镜像名称:tag

拉取镜像从中央仓库下载镜像到本地,假如不声明tag,会默认拉取latest版本

构建镜像 docker build -t nginx:test(需要Dockerfile)

1.4. 镜像删除

# docker rmi 镜像id
# docker rmi 镜像名称
# docker rmi 镜像名称:tag
# docker rmi `docker images -q` #删除所有镜像

删除镜像前必须要确保镜像没有被使用,也就是说,没有通过当前镜像创建容器

id可以只写前几位

1.5 镜像备份/导出

docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o /root/mycentos7.tar mycentos:7

-o 镜像打包后的归档文件输出的目录

1.6 镜像导入/恢复

docker load [OPTIONS]
docker load -i mycentos7.tar
  • --input, -i:指定导入的文件;
  • --quiet, -q:精简输出信息。

1.7 更新镜像:

  1. 使用镜像创建一个容器 docker run -t -i 镜像
  2. 在运行的容器内使用apt-get update更新
  3. 完成后使用exit退出容器
  4. 对刚刚的容器(通过id寻找),用docker commit -m -a 提交容器副本

1.8. 镜像推送至仓库与标签设置

docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname

先设置名称标签,再推送

退出登录

docker logout

2. 容器container相关

2.1. 查看容器

2.1.1. 正在运行的容器:

# docker ps
CONTAINER ID   IMAGE   COMMAND  CREATED    STATUS  PORTS   NAMES
  1. CONTAINER ID:容器ID
  2. IMAGE:所属镜像
  3. COMMAND:命令
  4. CREATED:创建时间
  5. STATUS:容器状态
    1. removing:迁移状态
    2. paused:暂停状态
    3. exited:停止状态
    4. dead:死亡状态
  6. PORTS:端口号
  7. NAMES:容器名称

2.1.2. 查看所有容器:

# docker ps -a
CONTAINER ID   IMAGE   COMMAND  CREATED    STATUS  PORTS   NAMES

2.1.3. 查看退出的容器:

docker ps -f status=exited

查看最后一次运行的容器

docker ps -l

2.2. 容器启动相关

# docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  1. -i:表示运行容器;
  2. -t:表示容器启动后会进入其命令行(终端)。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端;
  3. --name:为创建的容器命名;
  4. -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上;
  5. -d:在 run 后面加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加 -i -t 两个参数,创建容器后就会自动进容器里);
  6. -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个 -p 做多个端口映射。
  7. -P:随机使用宿主机的可用端口与容器内暴露的端口映射。

在Docker中,startrestartrun是三个不同的命令,各自有不同的功能和用途:

  1. docker start:启动已经创建但是处于停止状态的容器。已经创建的容器可以通过容器ID或者容器名称来标识。使用start命令启动容器时,容器将以先前的状态继续执行。
  2. docker restart:重新启动正在运行中的容器。与start命令不同的是,restart命令会立即停止并重新启动容器,而不考虑容器的当前状态。
  3. docker run:是docker container createdocker container start的缩写。会创建并运行一个新的容器实例。run命令在运行容器之前会先查找本地是否有指定的镜像,如果没有则会从远程仓库中下载。创建容器实例后,run命令会立即启动该容器并执行指定的命令。

2.2.1. 创建并进入容器

docker run -it --name 容器名称 镜像名称:标签 /bin/bash
docker run -it --name mymysql mysql:5.7 /bin/bash

Docker容器运行必须有一个前台进程,如果没有前台进程执行,容器认为是空闲状态,会自动退出

exit,一旦退出,容器便会停止运行

2.2.2. 守护方式创建容器

docker run -di --name 容器名称 镜像名称:标签

创建完成后,会启动容器,但不会进入容器,容器一直运行,除非用docker stop关闭容器

理解为了后台运行

2.2.3 守护方式进入容器

进入容器,这里是进入已经在运行的容器

docker attach docekrID 不推荐:退出exit,容器会自动停止

docker exec -it 容器名称|容器id /bin/bash

容器必须正在运行

2.3. 停止与启动容器

docker stop 容器名称|容器id
docker start 容器名称|容器id

2.4. 容器删除

# 删除指定容器
docker rm 容器名称|容器ID
# 删除多个容器
docker rm 容器名称|容器ID 容器名称|容器ID

2.5. 容器内外文件复制

如果我们需要将文件拷贝到容器内可以使用 cp 命令。

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

也可以将文件从容器内拷贝出来。

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

2.6. 查看容器ip地址

查看容器元信息

docker inspect 容器名称|容器ID

也可以直接执行下面的命令直接输出 IP 地址。

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器ID

2.7 导出容器

docker export dockerID > /目录/ubuntu.tar

最后的是导出的压缩包名

导入容器快照

docker import 从容器快照文件中导入为镜像

2.8 容器数据卷

todo

3. docker网络使用

3.1 创建网络

docker network create custom_network # 一个基于bridge网络模式的自定义网络模式

可以通过–drvier指定网络模式,默认是bridge网络模式

3.2 查看网络模式

docker network ls

容器之间要互相通信,必须要有属于同一个网络的网卡

通过 docker network inspect custom_network 查看两容器的具体 IP 信息

3.3 通过自定义网络模式创建容器

docker run -di –name aname –net custom_network busybox

通过docker inspect 容器名称|id 查看容器的网络信息

3.4 连接到网络

docker network connect 网络名称 容器名称 # 为容器连接新的网络模式

docker inspect 容器名称|容器id

可以查看容器的网络信息

3.5 断开网络

docker network disconnect 网络名称 容器名称

再次docker inspect无法找到容器的网络信息

3.6 移除网络

如果通过某个自定义网络模式创建了容器,则该网络模式无法删除

docker network rm 网络名称

4. todo

docker-compose

容器通信