Docker常用命令

安装

Ubuntu安装

镜像加速

一键加速

镜像

获取镜像

# 镜像仓库(Docker Registry)默认地址是 Docker Hub
# docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull ubuntu:18.04 

列出镜像

# 列出镜像
# 列表包含了 仓库名、标签、镜像ID、创建时间 以及 所占用的空间
# 镜像ID 则是镜像的唯一标识,一个镜像可以对应多个 标签
docker image lsdocker image ls

# 删除虚悬镜像
# 由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none> 的镜像。这类无标签镜像也被称为 虚悬镜像
# 可以随意删除的
docker image prune

# 查看中间镜像
# 为了加速镜像构建、重复利用资源,Docker 会利用中间层镜像
# 镜像不应该删除,否则会导致上层镜像因为依赖丢失而出错
docker image ls -a

删除镜像

# docker image rm [选项] <镜像1> [<镜像2> ...]
# 其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要

# 短ID来删除镜像 取前3个字符以上足够区分于别的镜像就可以了
docker image rm 501

# 用镜像名删除镜像 也就是 <仓库名>:<标签>
docker image rm centos

使用 Dockerfile 定制镜像

详细点击[这里]()

容器

启动容器

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括

  • 检查本地是否存在指定的镜像,不存在就从 registry 下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止
# 当docker run来创建容器时
# 新建并启动
docker run ubuntu:18.04 /bin/echo 'Hello world'

终止容器

# 终止容器 
docker container stop

启动已终止容器

docker container start

重启容器

# 重启容器
docker container restart

进入容器

# 进入容器
# 退出(exit)不会导致容器的停止(推荐)
docker exec -it 69d1 bash
# 退出(exit)会导致容器的停止
docker attach 243c

导入容器

# 导出容器快照到本地文件
docker export 7691a814370e > ubuntu.tar

# 容器快照文件中再导入为镜像
$ cat ubuntu.tar | docker import - test/ubuntu:v1.0
$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
test/ubuntu         v1.0                9d37a6082e97        About a minute ago   171.3 MB

删除容器

# 删除一个处于终止状态的容器
$ docker container rm trusting_newton

# 清理所有处于终止状态的容器
$ ocker container prune

访问仓库

注册

我们可以去公共仓库和私有仓库注册 如Docker Hub、Gitlab

登录

# 通过执行 docker login命令交互式的输入用户名及密码(账号密码是公共仓库的 如Docker Hub)
docker login

拉取镜像

# 关键词进行查找官方仓库中的镜像
$ docker search centos
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                             The official build of CentOS.                   6449      [OK]

# 拉去
$ docker pull centos

推送镜像

# 用户也可以在登录后(docker login)通过 docker push 命令来将自己的镜像到镜像仓库中 如Docker Hub、Gitlab
$ docker push username/ubuntu:18.04

$ docker search username
NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
username/ubuntu

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录

  • 数据卷 可以在容器之间共享和重用
  • 对 数据卷 的修改会立马生效
  • 对 数据卷 的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除

创建数据卷

# 创建一个数据卷
$ docker volume create my-vol

查看数据卷

# 查看所有的数据卷
$ docker volume ls
DRIVER              VOLUME NAME
local               my-vol

# 主机里使用以下命令可以查看指定 数据卷的信息
$ docker volume inspect my-vol
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]

启动一个挂载数据卷的容器

# 在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里
# 下面创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /usr/share/nginx/html 目录
$ docker run -d -P \
    --name web \
    # -v my-vol:/usr/share/nginx/html \
    --mount source=my-vol,target=/usr/share/nginx/html \
    nginx:alpine

查看数据卷的具体信息

# 主机里使用以下命令可以查看 web 容器的信息
$ docker inspect web
"Mounts": [
    {
        "Type": "volume",
        "Name": "my-vol",
        "Source": "/var/lib/docker/volumes/my-vol/_data",
        "Destination": "/usr/share/nginx/html",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
],

删除数据卷

# 删除数据卷
# 数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷
$ docker volume rm my-vol

# 可以在删除容器的时候使用'-v'删除数据卷
$ docker rm -v

# 删除无主的数据卷
$ docker volume prune

挂载一个主机目录作为数据卷

# 下面的命令加载主机的 /src/webapp 目录到容器的 /usr/share/nginx/html目录
# 本地目录的路径必须是绝对路径,以前使用 v 参数时如果本地目录不存在Docker会自动为你创建一个文件夹
# Docker 挂载主机目录的默认权限是 读写,用户也可以通过增加 readonly 指定为 只读
$ docker run -d -P \
    --name web \
    # -v /src/webapp:/usr/share/nginx/html \
    --mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \
    nginx:alpine

外部访问容器

端口映射

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射

映射所有接口地址

# 使用 hostPort:containerPort 格式本地的 80 端口映射到容器的 80 端口
$ docker run -d -p 80:80 nginx:alpine

映射到指定地址的指定端口

# 可以使用 ip:hostPort:containerPort 格式指定映射使用一个特定地址
$ docker run -d -p 127.0.0.1:80:80 nginx:alpine

映射到指定地址的任意端口

# 使用 ip::containerPort 绑定 localhost 的任意端口到容器的 80 端口
$ docker run -d -p 127.0.0.1::80 nginx:alpine

引用

最后修改:2023 年 10 月 18 日
如果觉得我的文章对你有用,请随意赞赏