docker部署与dockerfile
应用的部署
- 搜索app的镜像
- 拉去app的镜像
- 创建容器
- 操作容器中的app
MySql的部署
- 容器内的网络服务和外部机器无法直接通信
- 外部机器和宿主机可以直接通信、
- 宿主机和容器可以直接通信
- 容器中的服务需要被外部访问时,可以将
容器中提供服务的端口映射到宿主机的端口
上,外部访问宿主机的端口,就能间接访问容器服务 - 称为
端口映射
搜索mysql镜像
1
sudo docker search mysql
拉取镜像
1
sudo docker pull mysql
创建容器,设置端口映射,目录映射
1
2mkdir mysql
cd mysql1
2
3
4
5
6
7
8➜ 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 数据库
1
sudo mysql -uroot -P 3307 -h 127.0.0.1 -p
Tomcat的部署
和上述mysql部署类似
1 |
|
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多
镜像的制作
容器转镜像
容器转镜像
目录挂载的是不会写道commit镜像里面去
1
docker commit 容器id 镜像名称:版本号
将镜像打包成压缩文件
1
docker save -o 压缩文件名称 镜像名称:版本号
将压缩文件解压
1
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 |
书写完dockerfile时
1 |
|
- -f:指定dockerfile的文件路径
- -t:指定镜像的名称和版本号
示例
1 |
|
输入
1 |
|
1 |
|
运行
1 |
|
服务编排
原理:
可能在一个应用中包含了若干个应用,如mysql,redis之类的
所以,可以按照一定的业务规则批量的管理容器
Docker Compose
Docker Compose是一个编排 多容器分布式部署
的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止
- 利用Dockerfile定义运行环境镜像
- 使用docker-compose.yml定义组成应用的各服务
- 运行docker-compose up 启动应用
Docker 私有仓库
拉取私有仓库镜像
1
docker pull registry
启动私有仓库容器
1
2docker run -id --name=registry -p 5000:5000 registry
打开浏览器,输入
私有仓库ip:5000/v2/_catalog
可以看到{"repositories":[]}
表示私有仓库搭建成功修改daemon.json
1
2
3sudo vim /etc/docker/daemon.json
//添加
"insecure-registries":["私有服务器ip:5000"]重启docker服务
1
2systemctl restart docker
docker start registry
将镜像上传到私有仓库
标记镜像为私有仓库的镜像
1
docker tag wxm:1.0 192.168.0.22:5000/wxm:1.0
推送镜像到远程仓库
1
docker push 192.168.0.22:5000/wxm:1.0
从私有仓库拉取镜像
1
docker pull 192.168.0.22:5000/wxm:1.0