文章目录
- 前言
- 一、概念
- 二、常用方法
- 1.镜像
- 2.容器
- 三、镜像与镜像的关系,以及镜像构建和管理
前言
上一篇文章讲了docker的安装,本片文章我们来聊聊docker的一些常用操作。以及镜像、容器之间的关系
如果你想更加系统的学习docker,请看【docker入门与实战】
一、概念
docker三大核心概念:镜像 Image、容器 Container、仓库 Repository
镜像:
- Docker 镜像,就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器:
镜像
和容器
,就像是面向对象程序设计中的类和实例一样,镜像
是静态的定义,容器
是镜像
运行时的实体。容器
可以被创建、启动、停止、删除、暂停等。- 基于
镜像
可以创建容器
,同一个镜像
可以创建多个容器
。 - 基于
容器
也可以创建镜像
仓库:
- 用来保存
镜像
。镜像
存放在仓库
中,可以从仓库
中拉取或者推送镜像
至仓库
。
- 用来保存
二、常用方法
1.镜像
配置好仓库后可以在docker阿里云镜像仓库下载需要的镜像,像mysql
nginx
等
例如:mysql
docker pull mysql;
docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql; #初次启动要设置mysql初始密码 -d表示后台运行,否则你的终端就无法继续操作了
命令 | 描述 | 案例 |
---|---|---|
pull | 拉取镜像 | docker pull mysql #默认拉取最新镜像 docker pull mysql:8.0.28 # 拉取指定版本镜像 |
search | 搜索镜像 | docker search mysql |
tag | copy镜像并重命名,源镜像仍然存在 如果镜像没有镜像名,也可以通过镜像id进行更改名称 | docker tag mysql mysql2 |
images | 查看本地已存在的镜像信息 | docker images mysql # 指定镜像 docker images #所有镜像 docker images | grep mysql # 配合管道符使用 |
rmi | 删除镜像|镜像id | rmi mysql |
build | 基于dockerfile构建镜像 docker build -t 镜像名:tag url url: 指定Docker构建上下文的路径,它决定dockerfile中COPY、ADD 执行的相对路径,一般都是进入dockerfile文件的同级目录后,然后设置为. | docker build -t image1:1.0.0 . |
docker不能直接查看远程仓库中某个镜像的所有可用版本。但是有两个操作可以实现它
-
1直接进入镜像仓库管理界面,这里只列举两个
- 官方:
https://hub-stage.docker.com/_/nginx/tags
- 阿里:
https://cr.console.aliyun.com/cn-hangzhou/instances/artifact
。阿里的容器镜像服务是每个人都不同的,你需要登录进入
- 官方:
-
2 拉取镜像的所有可用版本。虽然这个命令会直接下载所有可用版本,比较耗费资源,时间也比较长。
docker pull --all-tags [IMAGE_NAME]
-
3 使用manifest inspect命令,他会打印出镜像在仓库中的清单
docker manifest inspect library/nginx
它是一个试验性的命令,如果你无法使用,则需要配置开启
manifest
vi ~/.docker/config.json # 添加以下内容 { "experimental": "enabled" }
2.容器
容器是通过依据image创建的运行实例,把image看成class,容器就相当于class new的实例对象。一个镜像可以create出多个容器。
通过exec命令进入容器后可以通过两种方式退出容器
1.exit
:退出容器,并保持容器运行2 ctrl + P Q
:退出容器,返回到主机命令窗口
命令 | 描述 | 案例 |
---|---|---|
create | docker create (–name=容器名) 镜像名 | docker create --name=mybusybox busybox |
run | 运行容器,run = pull + create + start 相当于运行三个命令 | docker run -d mybusybox # -d:后台运行 |
exec…-it…sh | /bin/bash | 进入容器内部 -t :表示打开一个伪终端;-i :即使没有附加也保持STDIN 打开在命令的最后加一个 sh 或/bin/bash 来启动一个交互式shell /bin/bash :功能更强 sh :兼容性更好 | docker exec -it mybusybox sh |
start | 启动容器 | docker start mybusybox |
restart | 重启容器 | docker restart mybusybox |
stop | 停止容器 | docker stop mybusybox |
rm | 删除容器 | docker rm mybusybox |
commit | 基于已有容器构建镜像 | |
ps | 查看容器状态:docker ps -a:查看所有容器docker ps -l:查看最近操作的容器 | docker pa -a |
logs | 查看容器日志:docker logs 容器名:查看指定容器的运行日志docker logs -f 容器名:实时查看指定容器的运行日志 | docker logs -f mysql |
容器在操作容器时,一些比较有用的参数
命令 | 说明 |
---|---|
--name | 指定容器名称:–name=容器名–name 容器名 |
-d | 后台运行 |
-p | 映射端口,宿主机端口:容器端口,例如:-p 3307:3306 |
-v | 挂载目录到本地,宿主机目录:容器目录,例如:-v /usr/local/nginx:/usr/local/nginx |
--restart | 自动重启,例如:–restart=always,跟随docker服务的重启而重启 |
三、镜像与镜像的关系,以及镜像构建和管理
镜像构建以及管理的内容比较多,本文的目的是记录镜像和容器的各种操作,所以单独把这一块放到这一篇文章。