使用Docker进行线上开发环境部署
在Linux上安装Docker
# 系统内核是3.10以上的
root@theSun:/# uname -r
4.4.0-185-generic
# 系统版本
root@theSun:/# cat /etc/os-release
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 查看镜像
docker image
卸载:
1、卸载依赖
sudo apt-get purge docker-ce docker-ce-cli containerd.io
2、删除资源
sudo rm -rf /var/lib/docker
Docker安装部署RabbitMQ
这里注意获取镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面。
查询镜像
docker search rabbitmq:management
可以看到如下结果:
[root@localhost ~]# docker search rabbitmq:management
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/macintoshplus/rabbitmq-management Based on rabbitmq:management whit python a... 1 [OK]
docker.io docker.io/transmitsms/rabbitmq-sharded Fork of rabbitmq:management with sharded_e... 0
[root@localhost ~]#
获取镜像
docker pull rabbitmq:management
可以看到如下结果
[root@localhost ~]# docker pull rabbitmq:management
Trying to pull repository docker.io/library/rabbitmq ...
management: Pulling from docker.io/library/rabbitmq
e7bb522d92ff: Pull complete
ad90649c4d84: Pull complete
5a318b914d6c: Pull complete
cedd60f70052: Pull complete
f4ec28761801: Pull complete
b8fa44aa9074: Pull complete
e8002a209c24: Pull complete
cd1206edcd43: Pull complete
769be0727074: Pull complete
7308b93d35af: Pull complete
c4102ef22c29: Pull complete
fefc8e1aa4b5: Pull complete
a271d400045b: Pull complete
b0d4c40c62de: Pull complete
Digest: sha256:8761de2c22badfc86dfe89791dc9dbf122f67ff0f8981966573d267af421b97f
[root@localhost ~]#
运行镜像
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
看到如下结果,变成功了:
[root@localhost ~]# docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
e194a2dbeb52f2296dfb6d1c527cf052d82be5ed9a4c974d70dcd6af3da3eb7e
[root@localhost ~]#
访问管理页面
访问管理界面的地址就是 http://[宿主机IP]:15672,可以使用默认的账户登录,用户名和密码都guest,如:
需要注意的是:
- 在云服务器上,默认情况下,RabbitMQ的端口号15672是不开放的,需要自己登陆控制台添加安全组规则,放开对15672端口号的访问限制。
- Linux系统上,宿主IP地址直接就是该系统的公网地址。
Docker安装Redis
找到一个合适的docker的redis的版本
可以去docker hub中去找一下
https://hub.docker.com/_/redis?tab=tags
使用docker安装redis
sudo docker pull redis
安装好之后使用docker images即可查看
truedei@truedei:~$
truedei@truedei:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 987b78fc9e38 10 days ago 104MB
httpd latest a8a9cbaadb0c 2 weeks ago 166MB
fjudith/draw.io latest 7b136fc80d31 3 weeks ago 683MB
mysql 5.7.29 f5829c0eee9e 5 weeks ago 455MB
truedei@truedei:~$
truedei@truedei:~$
准备redis
因为需要redis的配置文件,这里最好还是去redis的官方去下载一个redis使用里面的配置文件即可
redis中文官方网站:http://www.redis.cn/download.html
下载后解压出来:
这个redis.conf
文件就是咱们需要的,为了保险,还是拷贝一下,做个备份。
配置redis
修改redis.conf
配置文件: 主要配置的如下:
bind 127.0.0.1
#注释掉这部分,使redis可以外部访问daemonize no
#用守护线程的方式启动requirepass 你的密码
#给redis设置密码appendonly yes
#redis持久化 默认是notcp-keepalive 300
#防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300
创建本地与docker映射的目录,即本地存放的位置
创建本地存放redis的位置;
可以自定义,因为我的docker的一些配置文件都是存放在
/data
目录下面的,所以我依然在/data
目录下创建一个redis
目录,这样是为了方便后期管理
truedei@truedei:redis-5.0.5$ sudo mkdir /data/redis
truedei@truedei:redis-5.0.5$ sudo mkdir /data/redis/data
把配置文件
拷贝到刚才创建好的文件里
因为我本身就是Linux操作系统,所以我可以直接拷贝过去,如果你是windows的话,可能需要使用ftp拷贝过去,或者直接复制内容,然后粘贴过去。
truedei@truedei:redis-5.0.5$ sudo cp -p redis.conf /data/redis/
truedei@truedei:redis-5.0.5$
启动docker redis
启动:
truedei@truedei:~$ sudo docker run -p 6379:6379 --name redis -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
参数解释:
-p 6379:6379
:把容器内的6379端口映射到宿主机6379端口-v /data/redis/redis.conf:/etc/redis/redis.conf
:把宿主机配置好的redis.conf放到容器内的这个位置中-v /data/redis/data:/data
:把redis持久化的数据在宿主机内显示,做数据备份redis-server /etc/redis/redis.conf
:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动–appendonly yes
:redis启动后数据持久化
查看是否启动成功
查看是否成功启动:sudo docker ps
truedei@truedei:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85cb7d83a2ff redis "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 0.0.0.0:6379->6379/tcp redis
0a122a08125f mysql:5.7.29 "docker-entrypoint.s…" 5 weeks ago Up About an hour 0.0.0.0:3306->3306/tcp, 33060/tcp mysql57
truedei@truedei:~$
可以查看一下日志:sudo docker logs redis
truedei@truedei:~$ sudo docker logs redis
1:C 29 May 2020 01:16:22.107 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 29 May 2020 01:16:22.107 # Redis version=6.0.3, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 29 May 2020 01:16:22.107 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 6.0.3 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 1
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
1:M 29 May 2020 01:16:22.108 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 29 May 2020 01:16:22.108 # Server initialized
1:M 29 May 2020 01:16:22.108 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 29 May 2020 01:16:22.108 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 29 May 2020 01:16:22.108 * Ready to accept connections
truedei@truedei:~$
Docker安装MongoDB
MongoDB 是一个免费的开源跨平台面向文档的 NoSQL 数据库程序。
1、查看可用的 MongoDB 版本
访问 MongoDB 镜像库地址: https://hub.docker.com/_/mongo?tab=tags&page=1。
可以通过 Sort by 查看其他版本的 MongoDB,默认是最新版本 mongo:latest。
此外,我们还可以用 docker search mongo 命令来查看可用版本:
$ docker search mongo
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mongo MongoDB document databases ... 1989 [OK]
mongo-express Web-based MongoDB admin int... 22 [OK]
mvertes/alpine-mongo light MongoDB container 19 [OK]
mongooseim/mongooseim-docker MongooseIM server the lates... 9 [OK]
torusware/speedus-mongo Always updated official Mon... 9 [OK]
jacksoncage/mongo Instant MongoDB sharded cluster 6 [OK]
mongoclient/mongoclient Official docker image for M... 4 [OK]
jadsonlourenco/mongo-rocks Percona Mongodb with Rocksd... 4 [OK]
asteris/apache-php-mongo Apache2.4 + PHP + Mongo + m... 2 [OK]
19hz/mongo-container Mongodb replicaset for coreos 1 [OK]
nitra/mongo Mongo3 centos7 1 [OK]
ackee/mongo MongoDB with fixed Bluemix p... 1 [OK]
kobotoolbox/mongo https://github.com/kobotoolb... 1 [OK]
valtlfelipe/mongo Docker Image based on the la... 1 [OK]
2、取最新版的 MongoDB 镜像
这里我们拉取官方的最新版本的镜像:
$ docker pull mongo:latest
3、查看本地镜像
使用以下命令来查看是否已安装了 mongo:
$ docker images
4、运行容器
安装完成后,我们可以使用以下命令来运行 mongo 容器:
$ docker run -itd --name mongo -p 27017:27017 mongo --auth
参数说明:
- -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
- –auth:需要密码才能访问容器服务。
Docker安装ElasticSearch
下载ElasticSearch
docker pull elasticsearch:6.8.6
运行ElasticSearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e “ES_JAVA_OPTS=-Xms512m -Xmx512m” elasticsearch:6.8.6
查看正在运行的容器
docker ps
启动测试
网页输入:“主机地址:9200”,出现如下json数据,即成功!同样需要放开端口
Docker安装MySQL
拉取MySQL镜像
docker pull mysql
查看镜像
docker images
创建目录
mkdir -p /home/docker/mysql/conf.d
mkdir -p /home/docker/mysql/data
这两个用于保存配置和数据
创建MySQL容器
docker run -di -p 3307:3306 -v /home/docker/mysql/conf.d:/etc/mysql/conf.d -v /home/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql
-v 映射目录,将容器内的配置与数据文件夹,映射到宿主机目录
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
进入MySQL容器,
docker exec -it mysql /bin/bash
登陆mysql
mysql -u root -p
输入密码,即可进入mysql,证明安装成功。
打开远程连接
此时,当使用Navicat远程连接docker容器中的mysql时,会报错
1251 - Client does not support authentication protocol
这是因为mysql并没有打开远程连接,打开方法如下:
1,容器中登录mysql,查看mysql的版本
mysql> status;
mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL)
2,进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)授权
mysql> GRANT ALL ON *.* TO 'root'@'%';
刷新权限
mysql> flush privileges;
此时,还不能远程访问,因为Navicat只支持旧版本的加密,需要更改mysql的加密规则
更改加密规则
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
更新root用户密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
刷新权限
mysql> flush privileges;
OK,设置完成,再次使用 Navicat 连接数据库
退出mysql数据库
mysql> exit;
退出当前mysql容器
exit;
优化mysql所用内存
通过docker查看容器使用内存情况
docker stats
一般情况下,默认装的Mysql是8.0以上,占用内存在350M以上,这个对于小机器来说,占比还是比较大的,可以优化。
进入文件夹
cd /home/docker/mysql/conf.d/
查看 .cnf 文件,如果没有,随便新建个,例如
vim my.cnf
输入内容,并保存
[mysqld]
performance_schema = OFF
重启mysql 容器
docker restart mysql容器的id
再查看
docker stats
清理linux中buff/cache过大的方法
第一步:sync先同步一下
sync
第二步:清cache
echo 3 > /proc/sys/vm/drop_caches
Docker安装Nginx和Tomcat
Docker pull拉取相关的镜像
Docker run 启动服务器
Docker run -d -p 9090:80 nginx
后台-d运行一个nginx,并把本地的9090端口映射到nginx的80端口。也可以用docker run -d -P xx
用-P来随机映射一个端口
用lsof -i:9090查看端口
Docker run -d -p 8080:80 tomcat
与docker运行nginx同理。
对Tomcat编写Dockerfile
FROM tomcat # 启动镜像的名字
MAINTAINER xudong xxd0225@gmail.com # 维护信息
COPY jpress-v3.3.0.war /usr/local/tomcat/webapps # 把当前目录的war包copy到tocat的目录下
开始制作一个imagesdocker build .这个之多的名字是none, 可以用tag来指定一个名字,注意名字要全部小写。
docker build -t chasaystest:1.0 .
然后运行docker run -d -P 80:8080 chasaystest。 这样就可以把tomcat 8080的映射到1234端口。本机用1234就可以访问tomcat端口。http://localhost:1234