文章目錄
Docker的安裝
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
//安裝依賴包
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
sudo systemctl enable docker
sudo systemctl start docker
sudo groupadd docker
//將當前用戶加入docker組
sudo usermod -aG docker $USER
安裝consul、redis、rabbitmq、mysql
docker network create -d bridge spring-net
docker pull consul
docker pull redis
docker pull rabbitmq:management
//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 進行日誌輪替
部署微服務
//在/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
<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>
redis:
host: ${REDIS_HOST:localhost}
rabbitmq:
host: ${RABBIT_MQ_HOST:localhost}
consul:
host: ${CONSUL_HOST:localhost}
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"]
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 | 清除無主的數據卷 |