Docker部署微服務(Cloud-Admin)以及Docker參數、命令

Docker的安裝

  1. 卸載舊版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
  1. 使用yum安裝
//安裝依賴包
sudo yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2
// 添加國內 yum 軟件源
yum-config-manager \
    --add-repo \
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
//更新 yum 軟件源緩存,並安裝 docker-ce。
sudo yum makecache fast
sudo yum install docker-ce
  1. 設置開機自啓和自動服務
sudo systemctl enable docker
sudo systemctl start docker
  1. 建立docker用戶組
sudo groupadd docker
//將當前用戶加入docker組
sudo usermod -aG docker $USER

安裝consul、redis、rabbitmq、mysql

  1. 新建docker網絡
docker network create -d bridge spring-net
  1. 獲取鏡像
docker pull consul
docker pull redis
docker pull rabbitmq:management
  1. 運行鏡像
//consul
docker run -d -p 8500:8500 --name consul --network spring-net consul agent -server -bootstrap-expect=1 -client 0.0.0.0 -ui

//-bootstrap-expect:指定期望的server節點的數量,並當server節點可用的時候,自動進行bootstrapping


//rabbitmq
docker run -d --name rabbitmq --network spring-net -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672  rabbitmq:management


//redis  需要先配置好/etc/redis.conf
//https://raw.githubusercontent.com/antirez/redis/4.0/redis.conf
docker run -p 6379:6379 --network spring-net -v /etc/redis/redis.conf:/etc/redis/redis.conf -v /opt/docker/redis:/data  --name redis -d redis redis-server /etc/redis/redis.conf --appendonly yes

//redis-server --appendonly yes : 在容器執行redis-server啓動命令,並打開redis持久化配置

//mysql
docker run -d -p 3306:3306 --name mysql --network spring-net -v /etc/mysql/my.cnf:/etc/my.cnf -v /var/log/mysql:/var/log/mysql -v /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=ZXWL@1702b mysql:5.7.26

安裝nginx

可以參考 Docker 中運行 Nginx,以及使用 Logrotate 進行日誌輪替

部署微服務

  1. 配置服務器docker可以遠程訪問
//在/usr/lib/systemd/system/docker.service中添加參數
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

//重新讀取配置文件、重啓服務
systemctl daemon-reload
systemctl restart docker
  1. pom配置
   <build>
       <finalName>ace-gateway</finalName>
       <plugins>
           <plugin>
               <groupId>com.spotify</groupId>
               <artifactId>docker-maven-plugin</artifactId>
               <version>1.2.0</version>
               <configuration>
                   <dockerHost>http://你的服務器地址:2375</dockerHost>
                   <imageName>${project.artifactId}</imageName>
                   <dockerDirectory>src/main/docker</dockerDirectory>
                   <resources>
                       <resource>
                           <targetPath>/</targetPath>
                           <directory>${project.build.directory}</directory>
                           <include>${project.build.finalName}.jar</include>
                       </resource>
                   </resources>
               </configuration>
           </plugin>
       </plugins>
   </build>
  1. application配置
redis:
   host: ${REDIS_HOST:localhost}
rabbitmq:
   host: ${RABBIT_MQ_HOST:localhost}
consul:
     host: ${CONSUL_HOST:localhost}
  1. Dockerfile配置
FROM anapsix/alpine-java:8_server-jre_unlimited
VOLUME /tmp
ADD ace-gateway.jar app.jar
ENV REDIS_HOST=redis
ENV RABBIT_MQ_HOST=rabbitmq
ENV CONSUL_HOST=consul
RUN bash -c 'touch /app.jar' \
   && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
   && echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=utf-8","-jar","/app.jar"]
  1. 運行服務
docker run -d -p 8765:8765 --network spring-net --name geteway iot-gateway

防火牆開啓端口

//查看已開放端口
firewall-cmd --list-ports
//添加端口 consul:8500 rabbitmq後臺管理界面:15672
firewall-cmd --zone=public --add-port=8500/tcp --permanent
//修改配置文件後 使用命令重新加載
firewall-cmd --reload
//重啓防火牆
systemctl restart firewalld

Docker參數/命令

參數 描述
-d, --detach=false 指定容器運行於前臺還是後臺,默認爲false
-i, --interactive=false 打開STDIN,用於控制檯交互
-t, --tty=false 分配tty設備,該可以支持終端登錄,默認爲false
-u, --user="" 指定容器的用戶
-a, --attach=[] 登錄容器(必須是以docker run -d啓動的容器)
-w, --workdir="" 指定容器的工作目錄
-c, --cpu-shares=0 設置容器CPU權重,在CPU共享場景使用
-e, --env=[] 指定環境變量,容器中可以使用該環境變量
-m, --memory=“300M” 設置容器內存上限300M(只設置-m不設置–memory-swap,則–memory-swap爲-m兩倍)
–memory-swap=1 要和-m連用,設置內存+swap的使用限額。,值爲-1表示不受限
-P, --publish-all=false 指定容器暴露的端口
-p, --publish=[] 指定容器暴露的端口
-h, --hostname="" 指定容器的主機名
-v, --volume=[] 給容器掛載存儲卷,掛載到容器的某個目錄,要掛載文件需要現在宿主機中提前創建
–volumes-from=[] 給容器掛載其他容器上的卷,掛載到容器的某個目錄
–cap-add=[] 添加權限
–cap-drop=[] 刪除權限
–cidfile="" 運行容器後,在指定文件中寫入容器PID值,一種典型的監控系統用法
–cpuset="" 設置容器可以使用哪些CPU,此參數可以用來容器獨佔CPU
–device=[] 添加主機設備給容器,相當於設備直通
–dns=[] 指定容器的dns服務器
–dns-search=[] 指定容器的dns搜索域名,寫入到容器的/etc/resolv.conf文件
–entrypoint="" 覆蓋image的入口點
–env-file=[] 指定環境變量文件,文件格式爲每行一個環境變量
–expose=[] 指定容器暴露的端口,即修改鏡像的暴露端口
–link=[] 指定容器間的關聯,使用其他容器的IP、env等信息
–lxc-conf=[] 指定容器的配置文件,只有在指定–exec-driver=lxc時使用
–name="" 指定容器名字,後續可以通過名字進行容器管理,links特性需要使用名字
–net=“bridge” 容器網絡設置
bridge 使用docker daemon指定的網橋
host //容器使用主機的網絡
container:NAME_or_ID >//使用其他容器的網路,共享IP和PORT等網絡資源
none 容器使用自己的網絡(類似–net=bridge),但是不進行配置
–privileged=false 指定容器是否爲特權容器,特權容器擁有所有的capabilities
–restart=“no” 指定容器停止後的重啓策略:
no:容器退出時不重啓
on-failure:容器故障退出(返回值非零)時重啓
always:容器退出時總是重啓
–rm=false 指定容器停止後自動刪除容器(不支持以docker run -d啓動的容器)
–sig-proxy=true 設置由代理接受並處理信號,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
–log-opt max-size=10m --log-opt max-file=1 限制生成的json.log單個文件大小和保留文件個數
或者配置 Dockerd 的配置:編輯/etc/docker/daemon.json
添加{ “log-opts”: {“max-size”:“10m”, “max-file”:“3”} }
加載配置文件:systemctl daemon-reload重啓:systemctl restart docker
命令 描述
docker attach 附加到正在運行的容器
docker commit 從容器的更改創建一個新的映像
docker cp 在容器和本地文件系統之間複製文件/文件夾
docker create 創建一個新的容器
docker diff 檢查容器文件系統上文件或目錄的更改
docker exec 在運行容器中運行命令
docker export 將容器的文件系統導出爲tar存檔
docker inspect 顯示一個或多個容器的詳細信息
docker kill 殺死一個或多個運行容器
docker logs 獲取容器的日誌
docker ls 列出容器
docker pause 暫停一個或多個容器內的所有進程
docker port 列出端口映射或容器的特定映射
docker prune 取出所有停止的容器
docker rename 重命名容器
docker restart 重新啓動一個或多個容器
docker rm 刪除(移除)一個或多個容器
-v :同時移除數據卷
docker run 在新容器中運行命令
docker start 啓動一個或多個停止的容器
docker stats 顯示容器的實時流資源使用統計信息
docker stop 停止一個或多個運行容器
docker top 顯示容器的正在運行的進程
docker unpause 取消暫停一個或多個容器內的所有流程
docker update 更新一個或多個容器的配置
docker wait 阻止一個或多個容器停止,然後打印退出代碼
docker image prune 清除REPOSITORY和TAG爲的鏡像
docker volume prune 清除無主的數據卷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章