5. 部署应用
5.1 MySQL 部署
-
拉取MySQL镜像
docker pull mysql:5.7
-
创建容器
docker run -id --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
-
登录容器
docker exec -it mysql /bin/bash
-
登录容器MySQL数据库
mysql -uroot -proot --default-character-set=utf8
-
我的虚拟机的IP地址是
192.168.10.129
,我们远程访问MySQL,可以看到访问成功mysql -uroot -proot -h192.168.10.129 -P3306
注意:这里访问的是宿主机的IP和端口,宿主机映射的端口是哪个就访问哪个端口,比如容器的3306端口在宿主机的映射是33306,那么访问容器的MySQL就是
宿主机IP:33306
5.2 Nginx 部署
- 拉取nginx镜像
docker pull nginx
- 创建守护方式容器
docker run -di --name=nginx -p 80:80 nginx
- 通过浏览器访问一下:
192.168.10.129:80
- 修改nginx配置的话一般通过目录挂载的形式,这里先通过
cp
命令将容器中nginx的配置目录拷贝到宿主机,然后再将宿主机我们之前创建的mydata
目录挂载到容器docker cp nginx:/etc/nginx /usr/local/mydata/nginx/
- 由于挂载是创建容器时进行的,我这里将当前容器删除再重新创建一个(当前也有其他的方法,我们这里只是练习,简单一点就好)
docker stop nginx docker rm nginx docker run -id --name=nginx -p 80:80 -v /usr/local/mydata/conf/:/etc/nginx nginx
5.3 Redis 部署
- 拉取redis镜像
docker pull redis
- 创建redis镜像
docker run -id --name=redis -p 6379:6379 redis
5.4 RabbitMQ 部署
- 拉入Rabbitmq镜像
docker pull rabbitmq:3.7.12
- 创建容器
docker run -id --name=rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:3.7.12
- 登录
rabbitmq
容器,并安装ui插件docker exec -it rabbitmq /bin/bash rabbitmq-plugins enable rabbitmq_management
- 浏览器访问一下
5.5 Elasticsearch 部署
在Linux上安装7.0版本后,有许多注意的地方,比如
- 不能用root用户启动
- jdk必须是11版本
- 虚拟内存大小等相应的限制
-
拉取 Elasticsearch 镜像
docker pull elasticsearch:7.5.0
-
修改虚拟内存区域大小,否则会因为过小而无法启动
sysctl -w vm.max_map_count=262144
-
创建容器
docker run -id --name=elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "cluster.name=elasticsearch" -v /usr/local/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins elasticsearch:7.5.0
-
安装中文分词器
docker exec -it elasticsearch # 此命令需要在容器中运行 elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip
-
重启容器
docker restart elasticsearch
-
通过浏览器访问一下
5.6 Zookeeper 部署
- 拉取 Zookeeper 镜像
docker pull zookeeper:3.4.13
- 创建容器
docker run -id --name=zookeeper -p 2181:2181 zookeeper:3.4.13
6. 迁移与备份
6.1 容器保存为镜像
docker commit 容器名称/id 新镜像名称
- 将前面创建的
redis
保存为一个新的镜像docker commit redis myredis
- 基于新生成的镜像创建一个容器
myredis
docker run -id --name=myredis myredis
6.2 镜像备份
docker save -o 镜像文件 镜像名称
- 将
myredis
镜像备份成一个文件docker save -o myredis.tar myredis
- 将当前宿主机的
myredis
镜像删除
6.3 镜像恢复与迁移
# -i:输入的文件
docker load -i 镜像文件
- 将上面生成的镜像文件
myredis.tar
进行恢复docker load -i myredis.tar
- 我们可以继续创建一个新的
myredis
容器docker run -id --name=myredis myredis
7. Dockerfile 常用命令
7.1 什么是 Dockerfile
- Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用与基础镜像(操作级别的镜像,比如:centos镜像)并最终创建一个新的镜像
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作
- 对于运维人员:在部署时,可以实现应用的无缝移植
7.2 常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程(基础镜像要存在,若不存在,会优先pull基础镜像) |
MAINTAINER user_name | 声明镜像的创建者(非必须) |
ENV key value | 设置环境变量(可以写多条) |
RUN command | 是 Dockerfile 的核心部分(可以写多条) |
Add source_dir / file dest_dir / file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir / file dest_dir / file | 和 ADD 相似,但是如果有压缩文件不进行解压 |
WORKDIR path_dir | 设置工作目录 |
7.3 Dockerfile 构建 jdk1.8 镜像
JDK1.8下载路径:http://ruochen.net.cn:8080/JDK/jdk1.8
- 创建目录
mkdir -p /usr/local/dockerjdk8
- 将jdk1.8 tar包放入刚新建的文件夹中
mv jdk-8u202-linux-x64.tar.gz /usr/local/dockerjdk8/
- 编写
Dockerfile
文件vim Dockerfile
FROM centos:7 MAINTAINER ruochen WORKDIR /usr RUN mkdir /usr/local/java ADD jdk-8u202-linux-x64.tar.gz /usr/local/java ENV JAVA_HOME /usr/local/java/jdk1.8.0_202 ENV PATH $JAVA_HOME/bin:$PATH
- 执行
Dockerfile
构建镜像# .是指当前目录(Dockerfile所在目录) # docker build -t='镜像名称' . docker build -t='jdk1.8' .
8. Docker 私有仓库搭建与配置
8.1 私有仓库搭建与配置
-
拉取私有仓库镜像
docker pull registry
-
启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
-
打开浏览器访问
http://192.168.10.129:5000/v2/_catalog
看到{"repositories":[]}
表示私有仓库搭建成功并且内容为空
-
修改
daemon.json
vim /etc/docker/daemon.json
{"insecure-registries":["192.168.10.129:5000"]}
此步骤用于让 docker 信任私有仓库地址
-
重启 docker 服务
systemctl restart docker
-
重新运行
registry
容器docker start registry
8.2 Docker 私有仓库镜像上传
-
将前面创建的
jdk1.8
镜像上传到私有仓库 -
标记此镜像为私有仓库的镜像
docker tag jdk1.8 192.168.10.129:5000/jdk1.8
-
上传到私有仓库
docker push 192.168.10.129:5000/jdk1.8
-
我们再回到网址刷新一下,可以看到多了一个
jdk1.8