文章目录
- 应用的部署
- MySql的部署
- Tomcat的部署
- dockerfile
- Docker原理
- 镜像的制作
- 容器转镜像
- Dockerfile
- 服务编排
- Docker Compose
- Docker 私有仓库
应用的部署
- 搜索app的镜像
- 拉去app的镜像
- 创建容器
- 操作容器中的app
MySql的部署
- 容器内的网络服务和外部机器无法直接通信
- 外部机器和宿主机可以直接通信、
- 宿主机和容器可以直接通信
- 容器中的服务需要被外部访问时,可以将
容器中提供服务的端口映射到宿主机的端口
上,外部访问宿主机的端口,就能间接访问容器服务 - 称为
端口映射
-
搜索mysql镜像
sudo docker search mysql
-
拉取镜像
sudo docker pull mysql
-
创建容器,设置端口映射,目录映射
mkdir mysql cd mysql
➜ mysql sudo docker run -id \ > -p 3307:3306 \ > --name=c_mysql \ > -v $PWD/conf:/etc/mysql/conf.d \ > -v $PWD/logs:/logs \ > -v $PWD/data:/var/lib/mysql \ > -e MYSQL_ROOT_PASSWORD=123456 \ > mysql
-
参数说明
- -p 3307:3306将容器的3306端口映射到宿主机的3307端口
- -v $PWD/conf:/etc/mysql/conf.d :将主机当前目录下的
conf
挂载到容器的/etc/mysql/conf.d
上,配置文件 - -v $PWD/logs:/logs :将当前主机目录下的logs挂载到容器的logs,日志目录
- -e MYSQL_ROOT_PASSWORD=123456: 初始化root用户密码
-
使用
正常的使用mysql
-
本地访问到docker中的mysql 数据库
sudo mysql -uroot -P 3307 -h 127.0.0.1 -p
Tomcat的部署
和上述mysql部署类似
docker run -id --name=c_tomcat -p 8080:8080 -v $PWD:/usr/local/tomcat/webapps tomcat
dockerfile
Docker原理
-
Docker 镜像本质是
一个分层的文件系统
-
Docker中的一个centos镜像为什么只有200mb,而一个centos操作系统的iso文件要几个G
centos的ios镜像文件包含了
rootfs
和bootfs
,而docker的centos镜像复用了操作系统的bootfs,只有rootfs和其他镜像层
-
docker中一个tomcat镜像为什么有500mb,而一个tomcat安装包只有70mb
docker中镜像是分层的,分层下载,tomcat只有70多mb,但是他还需要依赖父镜像和基础镜像,所以对外暴露出tomcat镜像有500多
镜像的制作
dockerfile构建的过程
容器转镜像
-
容器转镜像
目录挂载的是不会写道commit镜像里面去
docker commit 容器id 镜像名称:版本号
-
将镜像打包成压缩文件
docker save -o 压缩文件名称 镜像名称:版本号
-
将压缩文件解压
docker load -i 压缩文件名称
-
我们将自己的实现的应用转化成一个镜像,将其转化成一个压缩文件,传给别人,别人使用这个镜像,生成对应的容器,就能够在自己那边部署使用该应用了
Dockerfile
Dockerfile概念
- Dockerfile是一个文本文件
- 里面包含了一条条的指令
- 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
- 可以给别人提供一个完全一致的开发环境
我们可以登陆hub.docker.com查看别人是怎么写dockerfile的
关键字 | 作用 | 备注 |
---|---|---|
FROM | 指定父镜像 | 指定dockerfile是基于哪个 image 构建的 |
MAINTAINER | 作者信息 | 表明谁写的 |
RUN | 执行命令 | 容器创建的过程中执行,格式:RUN command 如: RUN yum install-y vim ,进入后自动安装vim |
CMD | 容器启动命令 | CMD command param1 pararm2 用于设置部署容器实例是运行的默认命令 CMD /bin/bash |
ENTRYPOINT | 入口 | 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个ENTRYPOINT,当指定多个时,只有最后一个起效。 |
ADD | 添加文件 | ADD src dst 添加src 文件到dst路径下,同时还能 解压 |
ENV | 环境变量 | ENV== |
ARG | 构建参数 | |
WORKDIR | 工作目录 | 进入容器的默认目录WORKDIR /usr |
EXPOSE | 端口 | 使容器内的应用可以通过端口和外界交互 EXPOSE 80 |
VOLUME | 挂载的目录 | 用于在容器中创建一个或者多个挂载点,这些点可以用来在容器和主机之间共享数据,volume命令只是在容器中创建一个挂载点,不会在镜像中包含任何数据,需要我们使用COPY,ADD命令将数据拷贝到镜像中 |
docker build -f ./centos_file -t ccc:1 .
- -f:指定dockerfile的文件路径
- -t:指定镜像的名称和版本号
示例
mkdir docker
cd docker
vim test.cpp
输入
#include <iostream>
using namespace std;
int main()
{
char op;
float num1, num2;
cout << "输入运算符:+、-、*、/ : ";
cin >> op;
cout << "输入两个数: ";
cin >> num1 >> num2;
switch(op)
{
case '+':
cout << num1+num2;
break;
case '-':
cout << num1-num2;
break;
case '*':
cout << num1*num2;
break;
case '/':
if (num2 == 0)
{
cout << "error不能除以零";
break;
}
else
{
cout << num1 / num2;
break;
}
default:
// 如果运算符不是 +, -, * 或 /, 提示错误信息
cout << "Error! 请输入正确运算符。";
break;
}
return 0;
}
vim my.dockerfile
//输入
FROM codenvy/cpp_gcc
RUN mkdir /home/user/myapp
ADD test.cpp /home/user/myapp
WORKDIR /home/user/myapp
RUN g++ test.cpp -o test
CMD ["./test"]
运行
docker build -f ./my.dockerfile -t my:1.0 .
docker images
docker run -it my:1.0 /bin/bash
服务编排
原理:
可能在一个应用中包含了若干个应用,如mysql,redis之类的
所以,可以按照一定的业务规则批量的管理容器
Docker Compose
Docker Compose是一个编排 多容器分布式部署
的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止
- 利用Dockerfile定义运行环境镜像
- 使用docker-compose.yml定义组成应用的各服务
- 运行docker-compose up 启动应用
安装docker-compose
Docker 私有仓库
-
拉取私有仓库镜像
docker pull registry
-
启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
-
打开浏览器,输入
私有仓库ip:5000/v2/_catalog
可以看到{"repositories":[]}
表示私有仓库搭建成功 -
修改daemon.json
sudo vim /etc/docker/daemon.json //添加 "insecure-registries":["私有服务器ip:5000"]
-
重启docker服务
systemctl restart docker docker start registry
-
将镜像上传到私有仓库
-
标记镜像为私有仓库的镜像
docker tag wxm:1.0 192.168.0.22:5000/wxm:1.0
-
推送镜像到远程仓库
docker push 192.168.0.22:5000/wxm:1.0
-
-
从私有仓库拉取镜像
docker pull 192.168.0.22:5000/wxm:1.0