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
此处评论已关闭