做个笔记,万一哪天出问题了有个操作指南,有问题欢迎交流
各种安装
注意 创建容器有两种方式:
- 每个都通过docker run指令加一堆参数
- 使用docker-compose,推荐用这种,比较方便
Docker
先安装Docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
systemctl daemon-reload && systemctl start docker
#测试
docker run hello-world
配置镜像加速器,我使用的是阿里云 cr.console.aliyun.com/cn-hangzhou…
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["填自己的加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
开启远程访问
vi /lib/systemd/system/docker.service
#修改ExecStart开头的一行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
systemctl daemon-reload
service docker restart
在ECS上添加安全组,放开2375端口
MySQL
docker pull mysql
#运行容器
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
#修改配置 将docker的mysql的配置文件拷贝出来 因为docker里没有vim mysql是容器的name
docker cp mysql:/etc/mysql/my.cnf /root/my.cnf
vim /root/my.cnf
#内存占用过高 修改参数
table_open_cache=512
table_definition_cache=400
docker cp /root/my.cnf mysql:/etc/mysql/my.cnf
#进入容器
docker exec -it mysql bash
#登陆mysql
mysql -u root -p
Redis
docker pull redis
# 创建文件夹存放配置文件和持久化数据
mkdir /root/docker/redis
mkdir /root/docker/redis/data
cd /root/docker/redis
#下载配置文件并修改
wget https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf -O redis.conf
#------修改的内容------
bind 127.0.0.1 #注释掉这部分,这是因为限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no #默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
dir ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #redis持久化(可选)
requirepass 密码 #配置redis访问密码
#-----------------
#运行 加上--privileged=true会启动失败
docker run -d --name redis -p 6379:6379 -v /root/docker/redis/redis.conf:/etc/redis/redis.conf -v /root/docker/redis/data:/data redis redis-server /etc/redis/redis.conf
#进入
docker exec -it redis redis-cli
auth password
Nginx
主要工作是将配置文件挂载到docker的nginx中
如果需要配置反向代理,注意格式别写错了
#第一种
location /proxy/ {
proxy_pass http://127.0.0.1/;
}
#代理到URL:http://127.0.0.1/test.html
#第二种(相对于第一种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1;
}
#代理到URL:http://127.0.0.1/proxy/test.html
#第三种:
location /proxy/ {
proxy_pass http://127.0.0.1/aaa/;
}
代理到URL:http://127.0.0.1/aaa/test.html
#第四种(相对于第三种,最后少一个 / )
location /proxy/ {
proxy_pass http://127.0.0.1/aaa;
}
#代理到URL:http://127.0.0.1/aaatest.html
步骤
docker pull nginx
mkdir nginx
cd nginx
#创建目录 用于外挂
mkdir html logs conf conf.d
#先创建一个容器把配置文件copy出来 随后删除
#ID是容器的ID
docker run -itd nginx nginx
docker cp ID:/etc/nginx/nginx.conf conf/nginx.conf
docker cp ID:/etc/nginx/conf.d/default.conf conf.d/default.conf
#基础配置
vim conf/nginx.conf
#具体内容不贴了没变动 开启gzip
#----------------------------#
gzip on;
gzip_comp_level 6;
gzip_types application/javascript text/css text/xml;
#----------------------------#
#配置代理
vim nginx/conf.d/default.conf
#----------------------------#
server {
listen 80;
server_name ip;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
#----------------------------#
#运行
docker run -d --name nginx -p 80:80 --net host \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/logs:/var/log/nginx \
-v /root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
nginx
RabbitMQ
#这是带控制台的
docker pull rabbitmq:management
Docker-compose
实测发现,容器的时间和宿主机的时间对不上,使用volumes: - "/etc/localtime:/etc/localtime:ro" 解决
docker-compose -f docker-compose-server.yml up -d
version: '3'
services:
nginx:
image: nginx
ports:
- "80:80"
container_name: "nginx"
volumes:
- "/root/nginx/html:/usr/share/nginx/html"
- "/root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
- "/root/nginx/logs:/var/log/nginx"
- "/root/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf"
- "/etc/localtime:/etc/localtime:ro"
mysql:
image: mysql
ports:
- "3306:3306"
container_name: "mysql"
volumes:
- "/etc/localtime:/etc/localtime:ro"
environment:
MYSQL_ROOT_PASSWORD: 123456
redis:
image: redis
ports:
- "6379:6379"
container_name: "redis"
volumes:
- "/root/docker/redis/redis.conf:/etc/redis/redis.conf"
- "/root/docker/redis/data:/data"
- "/etc/localtime:/etc/localtime:ro"
command: redis-server /etc/redis/redis.conf
rabbitmq:
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
container_name: "rabbitmq"
volumes:
- "/etc/localtime:/etc/localtime:ro"
增加虚拟内存
由于服务器内存只有2G,实测运行一个java容器都需要300M左右,容器过多会导致内存不足将其他容器停掉。开始的时候mysql就被挤掉过,找了半天也没发现问题,最后才发现是内存不足的原因。因此通过设置虚拟内存的方式来扩容
1.打开终端,切换到root用户,输入:free -m查看内存状态
[maker@LLM ~]$ free -m
total used free shared buff/cache available
Mem: 992 189 79 13 722 614
Swap: 0 0 0
Swap也就是虚拟内存为0
2.选择一个较大的分区,建立分区文件
[root@LLM ~]# dd if=/dev/zero of=/opt/swap bs=1024 count=1024000
1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 16.6877 s, 62.8 MB/s
[root@LLM ~]#
该命令表示在opt分区建立名为swap,大小为1G的虚拟内存文件
3.将swap文件设置为swap分区文件
chmod 600 /opt/swap //注意更改swap文件的权限
[root@LLM ~]# mkswap /opt/swap
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=fc47f29e-31af-401e-856d-0fec5262179e
4.激活swap,启用分区交换文件
swapon /opt/swap
5.现在看下结果
[root@LLM ~]# free -m
total used free shared buff/cache available
Mem: 992 191 63 13 737 625
Swap: 999 0 999
Vue打包
#更改vue.config.js
publicPath: './'
#运行
npm run build:prod
#如果不成功 看看package.json里的scripts的build带不带参数
成功之后多出一个dis文件夹
将dist路径下的所有文件复制到刚才创建的html下即可
访问地址首页显示如下
后台打包
docker环境默认为ip:2375,所以需要在环境变量中添加DOCKER_HOST=tcp://ip:2375 ,然后重启
Dockerfile
以eureka-server-single模块为例,在模块根路径下创建Dockerfile文件
内容如下
FROM java:8
VOLUME /tmp
ADD target/eureka-server-single-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8761
ENTRYPOINT ["java","-jar","/app.jar"]
配置是网上找的,大致说明一下意思:
FROM是基础镜像
ADD的前半部分是项目打成jar包之后的路径
RUN是要执行的命令
EXPOSE是要暴露的端口
pom.xml
打包使用了dockerfile-maven-plugin,因此在build下配置
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 镜像名称-->
<repository>${project.artifactId}</repository>
<!-- 镜像的tag 默认就是latest-->
<tag>latest</tag>
<dockerfile>Dockerfile</dockerfile>
<!-- Dockerfile的路径-->
<contextDirectory>${project.basedir}</contextDirectory>
<buildArgs>
<!-- 项目jar包路径-->
<!-- finalName = artifactId + version-->
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
打包
配置完上述之后,直接用maven的Lifecycle打包即可
多模块打包见 blog.csdn.net/qq_30299977…
docker-compose
坑
1、 打包失败
要注意打包的项目是不是依赖其他的包。比如本项目需要oauth2模块先启动
有问题继续更新
欢迎大家关注公众号