Docker相关
Docker就相当于一个开源的应用容器引擎,是容器化技术,用来解决软件迁移造成的环境不兼容问题
一、安装Docker
- 具体步骤(命令)
1 | 1.更新yum |
Docker架构
- 镜像(Image):相当于是一个root文件系统,比如官方镜像ubuntu就包含了完整的一套Ubuntu最小系统的root文件系统
- 容器(Container):镜像和容器的关系,就像是面向对象程序设计中类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
配置Docker镜像加速器
目的:默认情况下,从 http://hub.docker.com 上下载docker的镜像太慢。所以配置镜像加速器。这个镜像加速器是私有的,本次选用阿里云的镜像加速器,直接去阿里云的官网登录获取就ok
1.中科镜像加速
2.阿里云
3.百度云
4.腾讯云
1
2
3
4
5
6
7
8
9
10
11
12
13获取到的镜像加速器命令地址格式如下:
sudo mkdir -p /etc/docker
将镜像加速器的地址写到这个文件中 daemon.json
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://8z8ozjmu.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload # 重新加载守护进程
sudo systemctl restart docker # 重新启动docker
验证是否成功配置镜像加速器,查看这个json文件是否写入了镜像加速器地址
cat /etc/docker/daemon.jsonDocker操作命令
1.服务相关
1
2
3
4
5
6
7
8
9
10启动docker服务
systemctl start docker
查看docker状态
systemctl status docker
停止docker服务
systemctl stop docker
重启docker服务
systemctl restart docker
开机启动docker
systemctl enable docker2.镜像相关
下载镜像不指定版本的时候,会默认下载latest版本(最新版本)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14查看镜像
docker images
搜索镜像
docker search [image-name]
拉取镜像(提供镜像名 和 版本号,不提供默认latest)
可以去官方网站去查看对应的镜像版本号
官方网站:hub.docker.com
docker pull [image-name]:[tag]
下载镜像 就是 拉取镜像
删除镜像(提供镜像的ID)
docker rmi [image-id]
docker images -q #查看所有的镜像id
docker rmi `docker images -q` # 删除所有的镜像3.容器相关
如何通过镜像创建容器,运行实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26-it 创建容器(交互式容器) -i 代表一直运行这个容器 -t代表给容器分配终端用来接收命令
docker run -it --name=[{name}] [repostitory]:[tag] /bin/bash #/bin/bash 代表进入容器的初始化指令
退出容器,回到宿主机
exit
查看现在正在运行的容器 , 通过-it 开启的退出就会关闭
docker ps
查看所有历史容器和正在运行的
docker ps -a
-id 创建容器(守护式容器) -i 代表一直运行这个容器 -d代表后台运行这个容器,退出容器不会关闭
docker run -id --name=[{name}] [repostitory]:[tag]
如果是用-id后台创建开启了容器,使用这个命令进入容器
docker exec -it [{name}] /bin/bash
查看所有运行和历史的容器id
docker ps -aq
正在运行的容器无法删除
docker rm [{name}]
查看容器信息 --->可以查看数据卷信息,查看绑定网络等等
docker inspect [{name}]4.数据卷相关
数据卷:宿主机中的一个文件或者目录,用来和容器进行关联。
作用:容器数据持久化,容器挂载
外部及其和容器间接通信
容器之间数据交换
特点:一个容器可以挂载多个目录
两个容器可以挂载同一个数据卷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19------------------------------------宿主机一对一挂载---------------------------------------
创建启动容器时候,使用 -v 参数设置数据卷
!!! 注意:宿主机中可以使用 ~ 代表root 但是在容器中不可以
docker run -it --name c1 \ -v /root/data:/root/data_container centos:7 /bin/bash #代表宿主机的是root下的data目录 和 容器中的data_container 相互对应起来
在 数据卷 目录下写个文件
echo test > test.txt
配置第二台容器
docker run -it --name=c2 -v /root/data:/root/data_container centos:7 /bin/bash
-----------------------------------宿主机数据卷容器挂载--------------------------------------
1.创建启动c3数据卷容器(将c3挂载到宿主机上),使用-v参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
2.创建启动 c1 c2 容器,挂载到c3容器上
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 cnetos:7 /bin/bash5.docker的应用部署
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46----------------------------------------部署mysql-------------------------------------------
步骤
1.搜索mysql镜像
docker search mysql
2.拉取mysql镜像(有必要去 hub.docker.com 官网)
docker pull mysql:5.7
3.创建容器、设置端口映射、目录映射 通过 -p 进行端口映射
3.1 在 /root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
3307 是映射在 宿主机 上的端口号
docker run -id -p 3307:3306 --name=c_mysql \
将主机当前目录下的conf/my.cnf 挂载到容器的/etc/mysql/my.cnf。配置目录
-v $PWD/conf:/etc/mysql/conf.d \
将主机当前目录下的logs目录挂载到容器的 /logs。日志目录
-v $PWD/logs:/logs \
将主机当前目录下的data目录挂载到容器的/var/lib/mysql。数据目录
-v $PWD/data:/var/lib/mysql \
初始化root用户的密码
-e MYSQL_ROOT_PASSWORD=[{password}] \
mysql:5.7
4.外部机器操作mysql 连接 虚拟机ip:3307
--------------------------------------------------------------------------------------------
----------------------------------------部署tomcat-------------------------------------------
!!! 在这里一定要注意 部署在tomcat容器中webapps目录下的文件一定要新放在个文件目录下面不然无法访问
docker search tomcat
docker pull tomcat
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/user/local/tomcat/webapps \
tomcat:[{versionID}]
--------------------------------------------------------------------------------------------
----------------------------------------部署Nginx-------------------------------------------
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-V $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
-----------------------------这里不加版本id 都是启动默认latest版本----------------------------
----------------------------------------部署Redis-------------------------------------------
在这里就没有进行目录挂载创建数据卷 -v
docker run -id --name=redis -p 6379:6379 redis:5.0
--------------------------------------------------------------------------------------------docker镜像原理
本质:分层文件系统
docker最低端是bootfs,使用的是宿主机的。第二层的是root文件系统rootfs,成为base image
linux文件系统由bootfs和rootfs两部分组成bootfs:包含bootloader(引导加载程序)和kernel(内核)。 rootfs:基础镜像,root文件系统,包含的就是典型linux系统中的 /dev 、/proc 、/bin 、/etc等标准目录和文件。 不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等等
centos的镜像小,主要是因为使用了宿主机上面的bootfs。
docker镜像如何制作
1.容器转为镜像
镜像无法传输,但是转换成为压缩文件可以传输
1 | 创建镜像 |
2.dockerfile方式
目的:简化镜像的创建过程
概念:docker是一个文本文件,包含了一条条的指令。每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。
对于开发人员:可以为开发团队提供一个完全一致的开发环境。
对于测试人员:可以拿着Dockfile文件构建一个新的镜像。
对于运维人员:在部署时,可以实现应用的无缝移植。
关键字:
FROM:指定父镜像
MAINTAINER:作者信息
LABEL:标签
RUN:执行命令
CMD:容器启动命令
ENTRYPOINT:入口
COPY:复制文件
ADD:添加文件
ENV:环境变量
ARG:构建参数
VOLUMN:定义外部可以挂载的数据卷
EXPOSE:暴露端口
WORKDIR:工作目录
USER:指定执行用户
HEALTHCHECK:健康检查
ONBUILD:触发器
STOPSIGNAL:发送信号量到宿主机
SHELL:指定执行脚本的shell
具体实例
需求:自定义centos7镜像,满足 默认登录路径为 /usr ;可以使用vim
1 | 1.定义父镜像 |
- 案例
1 | 前提创建一个dockerfile 的文件,写入以下内容 |
二、docker的服务编排
Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。
1.利用DOckerfile定义运行环境镜像
2.利用docker-compose.yml 定义组成应用的个服务
3.运行docker-compose up 启动应用
- docker compose
一、安装Docker Compose
1 | Compose目前已经完全支持Linux 、mac os 和windows,在我们安装Compose之前,需要先安装Docker。 |
二、卸载 Docker Compose
1 | 二进制包方式的,删除二进制文件即可 |
- 案例
使用docker-compose编排nginx+springboot项目
1 | 1.创建 docker-compose目录,然后进入目录 |
1 | # 2.编写 docker-compose 的核心文件 docker-compose.yml(名称固定) |
1 |
|
1 | 4.启动 docker-compose |
三、docker搭建私有仓库
私有仓库搭建
1 | 1.拉取私有仓库镜像 |
将镜像上传至私有仓库
1 | 1.标记镜像为私有仓库的镜像 |
私有仓库镜像拉取到本地
1 | docker pull 私有仓库服务器IP:5000/centos:7 |
完结