文章目录
Docker
一个开源的应用容器引擎
基于Go语言
2013年 dotCloud -> Docker Inc
用于打包应用及应用运行的环境
一、Docker 架构
Clients:客户端
Hosts:核心
localhost : 本地
daemon :守护进程
container:容器(类)
image: 镜像(对象)remote host:远程
daemon:
container:容器
image:镜像
Registries:仓库
Docker hub:官方仓库
private registry: 私有仓库
二、配置Docker镜像加速器
默认仓库在国外(https://hub.docker.com/), 下载镜像比较慢, 一般会配置一个国内的仓库
国内常用:
USTC: 中科大(https://docker.mirrors.ustc.edu.cn)
阿里云: 登录阿里云->搜索"容器镜像服务"相关关键字->容器加速器->加速器地址(每个人都不一样)
操作方式在下面
网易云:
腾讯云:
三、Docker命令(CentOS7)
服务相关(守护进程相关):
启动docker服务:
systemctl start docker
停止docker服务:
systemctl stop docker
重启docker服务:
restart docker
查看docker服务状态:
systemctl status docker
开机启动docker服务:
systemctl enable docker
镜像相关(image)
查看镜像:
docker images
- REPOSITORY: 镜像名称
- TAG: 版本号 不指定 latest 最新版
- IMAGE ID: 镜像id
- CREATED: 创建时间
- SIZE: 大小
搜索镜像:
docker search redis
- NAME : 名称
- DESCRIPTION: 描述信息
- STARS: -
- OFFICIAL: 是否是官方的标注 [OK] 的是官方的
- AUTOMATED:-
拉取镜像:
docker pull redis:版本号 (不写版本号下最新版本)
- 镜像版本查询 : hub.docker.com -> 搜索 -> 点击要拉取的软件 -> 下面有所有支持的版本号
删除镜像:
(rmi: remove image 缩写)
- docker rmi IMAGE ID 通过查看镜像中的 IMAGE ID 删除
- docker rmi redis: TAG 通过查看镜像中的 TAG 删除
docker rmi `docker images -q` : 删除所有镜像
#docker images -q 为查看所有镜像id#
容器相关
查看容器:
- docker ps 查看正在运行的容器
- docker ps -a 查看所有容器
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PPRTS | NAMES |
---|---|---|---|---|---|---|
容器ID | 镜像 | 初始化命令 | 创建时间 | 状态: up-运行中; exited-已关闭 | 创建时的名字 |
创建容器:
1. docker run -it --name=容器名字 镜像名称:版本 /bin/bash
- -it i:保持一致运行 t: 给容器分配一个客户端(交互式容器)
- 容器名字: (新创建的容器的名称自定义)
- 镜像名称: 查看镜像中的 REPOSITORY 字段的名字(也就相当于给那个应用创建容器)
- 版本号: 查看镜像中的 TAG 对应的参数
- /bin/bash : 进入容器时打开
实际为创建并进入创建的容器, 当退出容器的时候会关闭容器
- docker run -id --name=容器名字 镜像名称:版本
- -id: i:相同 d:后台创建(关闭客户端不停止容器,守护式容器)
创建容器但是不进入容器, 需要命令进入, 退出容器时不会关闭容器
进入容器:
docker exec -it 容器名称 /bin/bash
退出容器:
exit 退出到宿主机
启动容器:
docker start 容器名称
停止容器:
docker stop 容器名称
删除容器:
- docker rm 容器ID或容器名称 (删除指定容器)
docker rm `docker ps -aq` (删除所有容器)
运行中的容器是不能被删除的, 必须停止容器后才能删除
查看容器信息:
docker inspect 容器名称
- HostConfig -> Binds { } : 挂载的数据卷信息
- Mounts -> Source:宿主机目录 Destination:容器目录
四、容器的数据卷
数据卷概念
- Docker容器删除后, 容器中产生的数据不复存在
- Docker容器和外部及其不能直接交互数据
- 容器之间不能交互数据
-> 所以产生了数据卷的概念
数据卷: 数据卷是宿主机中的一个目录或文件, 将 [宿主机中的目录] 和 [容器中的目录] 进行挂载操作, 挂载后, 宿主机的目录被称为 数据卷
. 两个目录中的数据会进行同步. 一个数据卷可以被多个容器同时挂载, 此时所有目录数据均一致. 一个容器也可以挂载多个数据卷
配置数据卷
创建启动容器是,使用 -v 参数设置数据卷
- docker run -it --name=容器名称 -v 宿主机目录:容器内目录 镜像名称:镜像版本 …
- 目录必须是绝对路径
- 如果目录不存在会自动创建一个目录(宿主机或容器目录都会自动创建)
- 可以挂载多个数据卷 (命令拼接多个 -v 宿主机目录:容器内目录)
数据卷容器
多容器数据交换:
- 多容器挂载容一个数据卷
- 数据卷容器
配置:
- 创建数据卷容器:
- docker run -it --name=容器名称 -v 容器内目录 镜像名:镜像版本
- 创建应用容器 使用 --volumes-from 参数挂载数据卷
- docker run -it --应用容器1名字 --volumes-from 数据卷容器名称 镜像名:镜像版本
- docker run -it --应用容器2名字 --volumes-from 数据卷容器名称 镜像名:镜像版本
五、部署应用
部署MySQL
在Docker容器中部署MySQL, 并通过外部MySQL客户端操作MySQL Server
当容器中的网络服务需要被外部机器访问是, 可以将容器中提供服务的端口映射到宿主机上, 外部及其访问宿主机的该端口, 从而间接访问容器的服务, 这种操作成为:端口映射
实现步骤
1. 搜索MySQL镜像
2. 拉取MySQL镜像
3. 创建容器
docker run -id #以守护式创建爱你
-p 宿主机端口:容器端口 #内外部端口的映射
--name=容器名称 #容器名称
-v $PWD/conf:/etc/mysql/conf.d #数据卷:MySQL的配置文件存放目录
-v $PWD/logs:/logs #数据卷:MySQL的日志文件
-v $PWD/data:/var/lib/mysql # 数据卷:MySQL的数据文件
-e MYSQL_ROOT_PASSWORD=****** #初始化MySQL的密码
mysql:5.6 #使用MySQL5.6镜像
说明:
$PWD: 相当于进入MySQL的目录 (/root/mysql)
- 操作容器中的MySQL
部署Tomcat
docker run -id --name=容器名称
-p 8080:8080
-v $PWD:/usr/local/tomcat/webapps #将主机中的当前(~/tomcat目录)目录挂载到容器的 webapps
tomcat