环境
轻量应用服务器 2核2G(60G)+ centOS
Docker容器进镜像仓库
Docker's Container Image Repository
一、安装Docker
yum install docker
安装完成后,使用docker --version
查看版本信息:
切换数据源:
sudo vim /etc/docker/daemon.json
配置内容如下:
{ "registry-mirrors": ["https://m9r2r2uj.mirror.aliyuncs.com"] }
保存退出,重启docker
#重启命令
systemctl restart docker
二、安装Redis
# 1.拉取redis镜像
docker pull redis
# 2.查看本地redis镜像
docker images
# 3.运行redis
docker run --name layRedis -p 6379:6379 -d redis redis-server --appendonly yes
- docker run表示运行的意思
- --name layRedis 表示起个镜像名字叫
layRedis
- -p 6379:6379表示把服务器的6379映射到docker的6379端口,这样就可以通过服务器的端口访问docker的端口
- -d 表示以后台服务形式运行redis
- redis redis-server --appendonly yes表示开启持久化缓存模式,可以存到硬盘
运行Redis容器镜像
docker ps查看运行的镜像
可以看到redis容器镜像已经启动成功了~
三、安装MySQL
docker pull mysql:5.7.27
docker run --name layMySQL -e MYSQL_ROOT_PASSWORD=admin -d -p 3306:3306 mysql:5.7.27
--volumes-from volume-dados-banco-mysql
- MYSQL_ROOT_PASSWORD=admin表示root的初始密码为admin
- --name layMySQL 表示起个镜像名字叫
layMySQL
往docker中layMySQL导入layblog.sql
1.将服务器layblog.sql拷贝打docker的layMySQL容器中
docker cp layblog.sql layMySQL:/layblog.sql
2.进入layMySQL容器中
docker exec -it layMySQL /bin/bash
然后执行mysql -uroot -p
输入密码,创建layblog,指定数据库layblog
create database layblog;
use layblog;
3.执行
source /layblog.sql
四、安装ElasticSearch
docker安装ElasticSearch6.4.3版本中文分词器插件安装
命令
# 拉取es镜像并安装
docker run -p 9200:9200 -p 9300:9300 -d --name layes elasticsearch:6.4.3
docker run -p 9200:9200 -p 9300:9300 -d --name layes -e ES_JAVA_OPTS="-Xms256m -Xmx256m"
elasticsearch:6.4.3
# 进入layes镜像
docker exec -it layes /bin/bash
# 进入es配置文件位置,修改es的集群名称,默认为docker-cluster,这里修改为kobe
/usr/share/elasticsearch/config/elasticsearch.yml
# 执行以下命令拉取安装中文分词器
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip
# 退出并重启layes镜像
> exit
> docker restart layes
如果你跟我一样服务器配置也是2G的,docker在安装es的时候可能会报: error='Cannot allocate memory' (errno=12),也就是内存不足导致的,为了解决内存不足启动自动exit的问题,可以通过指定参数
-e ES_JAVA_OPTS="-Xms256m -Xmx256m"
,另外需要执行以下命令:
sudo sysctl -w vm.max_map_count=262144
不配置的话,可以会启动失败,具体报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]。
安装es中文分词器插件
- 进入镜像
docker exec -it layes /bin/bash
es配置文件位置: /usr/share/elasticsearch/config/elasticsearch.yml
安装中文分词插件命令
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip
开始下载:
安装完成显示100%:
五、安装RabbitMQ
一行命令搞定,注意RABBITMQ_DEFAULT_PASS=password是设置密码的意思,rabbitMq默认的账号密码是guest
,我们这里设置为root/admin
。
docker run -d --hostname layRabbitMq --name layRabbitMq -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
我们可以通过默认的端口访问rabbitmq的控制台:
通过我刚才设置的账户密码,可以登录进去:
启动完之后,使用docker ps -a
查询镜像信息:
可以看到至此我们的redis
、mysql
、es
、rabbitmq
容器镜像都已经启动运行成功了!
六、构建layblog的docker镜像
打包项目
mvn clean package -Dmaven.test.skip=true
然后把项目 layblog-0.0.1-SNAPSHOT.jar 包上传到服务器中 同layblog-0.0.1-SNAPSHOT.jar的目录,创建一个名称为Dockerfile文件。
创建Dockerfile
FROM java:8
EXPOSE 8080
VOLUME /tmp
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime && echo "{TZ}" > /etc/timezone
ADD layblog-0.0.1-SNAPSHOT.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
构建镜像
docker build -t layblog .
👏构建成功
通过docker images
查看镜像,发现我们的layblog镜像已经构建成功:
七、启动layblog项目
启动命令如下:
-- 8080端口
docker run -p 8080:8080 -p 9326:9326 --name layblog --link layes:layes --link layRabbitMq:layRabbitMq --link layMySQL:layMySQL --link layRedis:layRedis -d layblog
-- 80端口
docker run -p 80:80 -p 9326:9326 --name layblog --link layes:layes --link layRabbitMq:layRabbitMq --link layMySQL:layMySQL --link layRedis:layRedis -d layblog
-p 8080:8080 -p 9326:9326 :9326是因为即时聊天需要用到的ws端口 --link layes:layes 表示关联容器,把容器layes起别名为layes
查看layblog启动日志
docker logs -f layblog
Docker常见命令
容器
- 查看运行容器
docker ps
- 查看所有容器
docker ps -a
- 停止容器
docker stop 42ce2fbf1f02
- 删除容器(删除容器前必须先停掉容器,否则会报错)
docker rm 42ce2fbf1f02
- 删除全部容器
docker rm $(docker ps -aq)
- 一条命令实现停用并删除容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
镜像
- 查询镜像
docker images
- 删除某个镜像
docker rmi 镜像id
- 强制删除所有镜像
docker rmi -f $(docker images -q)