使用Docker部署开发环境

在Linux上安装Docker

1
2
3
4
5
6
 # 系统内核是3.10以上的
root@theSun:/# uname -r
4.4.0-185-generic

# 系统版本
root@theSun:/# cat /etc/os-release
1
2
3
4
5
6
7
8
9
10
11
# 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

1
2
3
4
5
6
7
8
# 查看镜像
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版本的才带有管理界面。

查询镜像

1
docker search rabbitmq:management

可以看到如下结果:

1
2
3
4
5
[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 ~]#

获取镜像

1
docker pull rabbitmq:management

可以看到如下结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[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 ~]#

运行镜像

1
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

看到如下结果,变成功了:

1
2
3
[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

1
sudo docker pull redis

安装好之后使用docker images即可查看

1
2
3
4
5
6
7
8
9
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持久化  默认是no tcp-keepalive 300 #防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300

创建本地与docker映射的目录,即本地存放的位置

创建本地存放redis的位置;

可以自定义,因为我的docker的一些配置文件都是存放在/data目录下面的,所以我依然在/data目录下创建一个redis目录,这样是为了方便后期管理

1
2
truedei@truedei:redis-5.0.5$ sudo mkdir /data/redis
truedei@truedei:redis-5.0.5$ sudo mkdir /data/redis/data

配置文件拷贝到刚才创建好的文件里

因为我本身就是Linux操作系统,所以我可以直接拷贝过去,如果你是windows的话,可能需要使用ftp拷贝过去,或者直接复制内容,然后粘贴过去。

1
2
truedei@truedei:redis-5.0.5$ sudo cp -p redis.conf /data/redis/
truedei@truedei:redis-5.0.5$

启动docker redis

启动:

1
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

1
2
3
4
5
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

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
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 命令来查看可用版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ 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 镜像

这里我们拉取官方的最新版本的镜像:

1
$ docker pull mongo:latest

3、查看本地镜像

使用以下命令来查看是否已安装了 mongo:

1
$ docker images

4、运行容器

安装完成后,我们可以使用以下命令来运行 mongo 容器:

1
$ 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镜像

1
docker pull mysql 

查看镜像

1
docker images 

创建目录

1
mkdir -p /home/docker/mysql/conf.d 
1
mkdir -p /home/docker/mysql/data 

这两个用于保存配置和数据

创建MySQL容器

1
2
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容器,

1
docker exec -it mysql /bin/bash

登陆mysql

1
mysql -u root -p

输入密码,即可进入mysql,证明安装成功。

打开远程连接

此时,当使用Navicat远程连接docker容器中的mysql时,会报错

1
1251 - Client does not support authentication protocol 

这是因为mysql并没有打开远程连接,打开方法如下:

1,容器中登录mysql,查看mysql的版本

1
mysql> status; 

mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL)

2,进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)授权

1
mysql> GRANT ALL ON *.* TO 'root'@'%';  

刷新权限

1
mysql> flush privileges;  

此时,还不能远程访问,因为Navicat只支持旧版本的加密,需要更改mysql的加密规则

更改加密规则

1
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;  

更新root用户密码

1
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';  

刷新权限

1
mysql> flush privileges;  

OK,设置完成,再次使用 Navicat 连接数据库

退出mysql数据库

1
mysql> exit; 

退出当前mysql容器

1
exit; 

优化mysql所用内存

通过docker查看容器使用内存情况

1
docker stats 

一般情况下,默认装的Mysql是8.0以上,占用内存在350M以上,这个对于小机器来说,占比还是比较大的,可以优化。

进入文件夹

1
cd /home/docker/mysql/conf.d/ 

查看 .cnf 文件,如果没有,随便新建个,例如

1
vim my.cnf

输入内容,并保存

1
2
[mysqld] 
performance_schema = OFF

重启mysql 容器

1
docker restart mysql容器的id 

再查看

1
docker stats 

清理linux中buff/cache过大的方法

第一步:sync先同步一下

1
sync 

第二步:清cache

1
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来随机映射一个端口

1
用lsof -i:9090查看端口

Docker run -d -p 8080:80 tomcat

与docker运行nginx同理。

对Tomcat编写Dockerfile

1
2
3
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

相关问题

Docker中安装Tomcat外部访问报错404资源未找到

1.将webapps.dist更名为webapps

2.将webapps.dist中的内容复制到webapps

谢谢你的支持哦,继续加油.