Docker 是一種容器技術,它部署簡單,能很好的進行服務隔離,生成鏡像,Push到鏡像倉庫,其他機器一鍵拉取部署。
Docker分為社群版CE和企業版EE,社群版是免費提供給個人和小型團隊使用,企業版會提供額外的收費服務。
CentOS 7使用Yum安裝Docker,部署Go Web網站。本Go Web網站是我的個人愽客(http://snaill.net/),使用Gin+Gorm+Mysql+Nginx開發,本次隻将Web愽客程式部署在Docker中,Mysql、Nginx暫時還部署在主控端上。
一、安裝Docker
1、Docker要求CentOS系統核心版本高于3.10,通過 uname –r 指令檢視核心版本
2、使用 sudo yum update 指令更新yum包到最新sudo yum update
3、如果安裝過舊版本的話,解除安裝舊版本
sudo yum remove docker docker-common docker-selinux docker-engine
4、安裝需要的軟體包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、設定yum源資訊
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
國内可使用阿裡雲,docker官方速度慢
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6、可檢視所有docker版本,并選擇特定版本安裝
yum list docker-ce --showduplicates | sort -r
7、安裝Docker
sudo yum install docker-ce
如果想安裝其他版本,在後面加上版本号,如:sudo yum install docker-ce-3:19.03.8
8、啟動Docker
systemctl start docker
啟動 start,停止 stop,重新開機 restart
設定開機啟動
systemctl enable docker
檢視Docker版本 docker version
到止Docker安裝完成
二、部署Go Web
1、交叉編譯Web項目
由于開發環境是windows,是以進行交叉編譯linux版Web項目,vs code終端PowerShell指令
$env:GOOS="linux" -- 設定運作系統
go build -- 編譯
2、由于Mysql裝在主控端上,Web需要通路,修改DB連接配接IP為172.17.0.1
由于mysql預設隻能本機登入,通過以下指令,設定允許遠端登入
mysql>GRANT ALL PRIVILEGES ON *.* TO 'your username'@'172.17.0.2' IDENTIFIED BY 'your password' WITH GRANT OPTION;
your username 和 your password 改成 mysql 資料庫的使用者名和密碼
安裝Docker後,172.17.0.2為Docker的預設IP
進入Docker:docker exec -it CONTAINER_ID sh
檢視ip:ifconfig
主控端的預設IP為172.17.0.1
3、編寫Dockerfile檔案,在項目根目錄下建立名為Dockerfile的檔案,内容如下,推薦第二種方式
3.1、項目檔案全部打包到鏡像裡
FROM alpine
WORKDIR /data/www/wblog_docker
COPY wblog /wblog/
COPY conf/ /wblog/conf/
COPY sitedata/ /wblog/sitedata/
COPY static/ /wblog/static/
COPY views/ /wblog/views/
WORKDIR /wblog
RUN apk add -U tzdata
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8090
ENTRYPOINT ["./wblog"]
3.2、配置等靜态檔案不打包到鏡像裡,運作時再映射到主控端目錄,修改配置而無需重新打包
FROM alpine
WORKDIR /data/www/wblog_docker
COPY wblog /wblog/
WORKDIR /wblog
RUN apk add -U tzdata
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8090
ENTRYPOINT ["./wblog"]
4、上傳編譯好的Web項目檔案到 CentOS 機器上
5、根據 Dockerfile 打包 Docker 鏡像
在 CentOS 上進入到項目根目錄下,執行 docker build 打包鏡像,指令最後的 . 指以目前目錄下的 Dockerfile 檔案打包鏡像
docker build -t wblog:v1.0 .
6、打包完成後,輸入 docker images 檢視鏡像
7、Docker 啟動鏡像,運作項目,兩種方式對應3中的兩種方式,推薦第二種方式
7.1、項目檔案全在鏡像中,運作 Docker 鏡像
docker run -d -p 8090:8090 --name wblog wblog:v1.0
7.2、配置等靜态檔案映射到主控端本地,運作 Docker 鏡像,-v docker目錄:主控端目錄
docker run -v /data/www/wblog_docker/conf:/wblog/conf -v /data/www/wblog_docker/sitedata:/wblog/sitedata -v /data/www/wblog_docker/static:/wblog/static -v /data/www/wblog_docker/views:/wblog/views -v /data/www/wblog_docker/log:/wblog/log -d -p 8090:8090 --name wblog wblog:v1.0
8、檢視Docker運作情況 docker ps
STATUS 為Up xxx 狀态運作,PORTS 為 0.0.0.0:8090->8090/tcp 主控端端口映射Docke端口成功,鏡像容器運作成功。
個人部落格就是部署在Docker中的,用Nginx代理,将snaill.net轉發到8090端口
docker 常用指令
打包鏡像:docker build -t wblog:v1.0 .
運作Docker鏡像:docker run -d -p 8090:8090 --name wblog wblog:v1.0
靜态檔案映射到主控端本地,運作Docker鏡像:
docker run -v /data/www/wblog_docker/conf:/wblog/conf -v /data/www/wblog_docker/sitedata:/wblog/sitedata -v /data/www/wblog_docker/static:/wblog/static -v /data/www/wblog_docker/views:/wblog/views -v /data/www/wblog_docker/log:/wblog/log -d -p 8090:8090 --name wblog wblog:v1.0
檢視運作鏡像容器:docker ps -a
啟動/停止/重新開機鏡像容器:docker start/stop/restart
删掉鏡像容器:docker rm ,删除前需先停止鏡像容器
删掉鏡像:docker rmi ,删除前需先删除鏡像容器
檢視鏡像容器元資訊:docker inspect
進入鏡像容器:docker exec -it CONTAINER_ID sh
部落格位址:http://www.snaill.net/post/9
本人愽客(https://www.snaill.net)由wblog(https://github.com/wangsongyan/wblog) 修改而來,在此表示感謝!