docker 部署

docker 部署

docker命令

#info|version
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker version    #显示docker的版本信息。
#帮助命令
docker 命令 --help #帮助命令
#镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
docker search #搜索镜像
docker pull #下载镜像 docker image pull
docker rmi #删除镜像 docker image rm
#容器命令
docker run 镜像id #新建容器并启动
docker ps 列出所有运行的容器 docker container list
docker rm 容器id #删除指定容器
	#删除所有容器
	docker rm -f $(docker ps -aq)  	 #删除所有的容器
	docker ps -a -q|xargs docker rm  #删除所有的容器
#启动和停止容器
docker start 容器id	#启动容器
docker restart 容器id	#重启容器
docker stop 容器id	#停止当前正在运行的容器
docker kill 容器id	#强制停止当前容器
#退出容器
exit 		#容器直接退出
ctrl +P +Q  #容器不停止退出 	---注意:这个很有用的操作
#其他常用命令
docker run -d 镜像名  #后台启动命令
docker logs 		#查看日志
docker top 容器id 	#查看容器中进程信息ps
docker inspect 容器id  #查看镜像的元数据
docker exec 		#进入当前容器后开启一个新的终端,可以在里面操作。(常用)
docker attach 		# 进入容器正在执行的终端
docker cp 容器id:容器内路径  主机目的路径	#从容器内拷贝到主机上
创建容器
docker run -id --name=容器名 --hostname=容器名 -p 8088:8088 --network mybridge 镜像名:版本
		-p 暴露端口,可以暴露多个,用多个 -p 主机端口:容器端口  
		-network 将容器放在一个桥接网络里面,这个网络里面的容器可以互相通信
		-e MYSQL_ROOT_PASSWORD=123456 数据库需要初始化密码
docker exec -it 容器名 /bin/bash   # 进入容器里面

docker安装

1 安装工具

yum install -y yum-utils device-mapper-persistent-data lvm2

2 添加docker的yum库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum makecache fast

3 安装docker

yum install docker-ce docker-ce-cli containerd.io

4 启动

 systemctl start docker
 systemctl enable docker

5 查看

docker -v
systemctl status docker

6 开启Docker远程访问

vim /lib/systemd/system/docker.service

找到[Service] 节点的ExecStart这一行,修改成下面,端口号最好改成其他的,不然容易被人拿去挖矿
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:4399

ExecStart该行注释 将端口改成4399 重启

systemctl daemon-reload 
systemctl restart docker 

访问 http://ip:2375/version是否成功,如果访问不成功可以开放防火墙的4399端口

firewall-cmd --zone=public --add-port=4399/tcp --permanent
firewall-cmd --reload

jdk

1 Dockerfile

FROM centos:7
MAINTAINER whh
WORKDIR /usr/local
RUN mkdir /usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

2 将 Dockerfile 和 jdk-8u171-linux-x64.tar.gz一起上传

3 创建镜像

docker build  -t="jdk:1.8" ./      # jdk的jar包和Dockerfile 在同一个文件夹下,在这个文件夹下运行命令

数据库

1 导入数据库镜像,可以不导入,在运行时自动导入

docker pull mysql:8.0

docker network create -d bridge mybridge  

2 启动mysql,如果本地没有mysql:8.0会先自动导入

docker run -id --name=mysql8 --hostname=mysql8 -p 3306:3306 --network mybridge -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

redis

1 创建容器

docker run -id --name redis --hostname redis  -p 6379:6379 redis --requirepass "123456"

2 创建容器

docker run -id --name redis --hostname redis -p 6379:6379 -v /usr/local/src/redis/data:/data -v /usr/local/src/redis/conf/redis.conf:/etc/redis/redis.conf redis-server /etc/redis/redis.conf \
redis:bullseye  --requirepass "123456"
 

rocketmq

1 文件夹

1 创关联目录
mkdir -p /usr/local/src/rocketmq/data/namesrv/logs /usr/local/src/rocketmq/data/namesrv/store /usr/local/src/rocketmq/conf /usr/local/src/rocketmq/data/broker/logs /usr/local/src/rocketmq/data/broker/store 

2 创建配置文件
cd /usr/local/src/rocketmq/conf
touch broker.conf

3 编辑配置文件
vim broker.conf

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 8.137.115.224

4 拉取镜像
docker pull rocketmqinc/rocketmq:4.4.0
docker pull styletang/rocketmq-console-ng

1 nameserver

docker run -id --network=mybridge -p 9876:9876 -v /usr/local/src/rocketmq/data/namesrv/logs:/root/logs -v /usr/local/src/rocketmq/data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:4.4.0 sh mqnamesrv

2 broker

docker run -id --network=mybridge -p 10911:10911 -p 10909:10909 -v  /usr/local/src/rocketmq/data/broker/logs:/root/logs -v  /usr/local/src/rocketmq/data/broker/store:/root/store -v  /usr/local/src/rocketmq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq:4.4.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

3 可视化工具

docker run -id --name rmqconsole --network=mybridge -p 9877:8080 --link rmqnamesrv:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -t styletang/rocketmq-console-ng

Fastdfs

1 拉取镜像

docker pull delron/fastdfs

2 创建Tracker服务

# 先创建文件夹
mkdir -p /usr/local/src/fastdfs/data/tracker

# 执行docker命令
docker run -id --name fdfstracker --hostname fdfstracker -p 22122:22122 --network=mybridge -v /usr/local/src/fastdfs/data/tracker:/var/fdfs delron/fastdfs tracker
# 注意:tracker服务默认的端口为22122

3 构建构建Storage服务

# 创建文件夹
mkdir -p /usr/local/src/fastdfs/data/storage
# 执行命令
docker run -id --name fdfsstorage --hostname fdfsstorage --network=mybridge  -e TRACKER_SERVER=localhost:22122 -v /usr/local/src/fastdfs/data/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
# 注意:其中TRACKER_SERVER中的ip要修改为你的Tracker服务所在的服务IP地址

RabbitMQ

docker run \
 -e RABBITMQ_DEFAULT_USER=root \
 -e RABBITMQ_DEFAULT_PASS=123456 \
 --name rabbitmq\
 --hostname rabbitmq\
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3-management

es

docker pull elasticsearch:7.12.1


# 创建文件夹
mkdir -p /usr/local/src/es/data
mkdir -p /usr/local/src/es/plugins


docker run -id --name es --hostname es -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node"  --privileged --network mybridge -p 9200:9200 -p 9300:9300 -t elasticsearch:8.0.1

kibana

docker pull kibana:7.12.1


docker run -id --name kibana --hostname kibana --link elasticsearch:elasticsearch -e "I18N_LOCALE=zh-CN" -p 5601:5601 --network mybridge  kibana:7.12.1

nacos

docker pull nacos/nacos-server


# 启动
docker run --name nacos --hostname nacos -d -p 8848:8848 --network mybridge -e MODE=standalone nacos/nacos-server


后端

1 在pom.xml 里面导入依赖

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
                    <!--镜像名 car:1.0-->
                    <imageName>permission:01</imageName>
                    <!--基础镜像-->
                    <baseImage>jdk:1.8</baseImage>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}
                            </directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <!--docker远程主机-->
                    <dockerHost>http://hwy:4399</dockerHost>
                </configuration>
            </plugin>

2 打包 成镜像

mvn clean package -Dmaven.test.skip=true docker:build

3 上传到服务器

4 创建桥接

docker network create -d bridge mybridge

5 启动镜像

docker run -id --name=permission_api --hostname=permission_api -p8080:8080 --network mybridge permissionsys:01

前端

1 打包

直接用npm run build 打包 ,将打包好的stac和index.html 一起打包,先打成 tar 包,再打成 gz 包 最后文件名变成

permissionweb.tar.gz 这种后缀的文件,然后添加 nginx.conf 和 Dockerfile 文件,

Dockerfile

FROM nginx:1.15
RUN mkdir /usr/share/nginx/permission_web
ADD ./permissionweb.tar.gz /usr/share/nginx/permission_web
ADD ./nginx.conf /etc/nginx/conf.d/
WORKDIR /usr/share/nginx
RUN chmod -R a+rx * permission_web   

nginx.conf

    server {
      listen 80;
      server_name  localhost;
      location / {
              root   /usr/share/nginx/permission_web;
              index  index.html;
      }
    }
    
    server {
      listen 8088;
      server_name  localhost;
	  location / {
		add_header 'Access-Control-Allow-Origin' $http_origin;
		add_header 'Access-Control-Allow-Credentials' 'true';
		add_header 'Access-Control-Allow-Methods' '*';
		add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,token,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
		add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
		if ($request_method = 'OPTIONS') {
			add_header 'Access-Control-Allow-Origin' $http_origin;
			add_header 'Access-Control-Allow-Credentials' 'true';
			add_header 'Access-Control-Allow-Methods' '*';
			add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,token,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
			add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
			add_header 'Access-Control-Max-Age' 1728000;
			add_header 'Content-Type' 'text/plain; charset=utf-8';
			add_header 'Content-Length' 0;
			return 204;
		}
		
		proxy_pass http://permission_api:8080;  #这里跟后端服务的link名字
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_connect_timeout 5;
	  }
	}

2 将这三个文件一起上传到服务器

3 创建镜像

# 必须在同一个文件目录下   这个 01 是版本
docker build -t="permission:01" ./

4 启动镜像,创建容器

# 这里要暴露两个端口 80 默认端口 8088 前段请求接口 
docker run -id --name=permission_web -p 80:80 -p 8088:8088 --network mybridge permission-web:01

4 进入容器

docker exec -it 容器名 /bin/bash 
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值