CentOS 7 Docker安裝部署Go Web


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 命令查看內核版本

image

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

image

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

image

到止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

image

由於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

image

宿主機的默認IP為172.17.0.1

image

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 機器上

image

5、根據 Dockerfile 打包 Docker 鏡像

在 CentOS 上進入到項目根目錄下,執行 docker build 打包鏡像,命令最后的 . 指以當前目錄下的 Dockerfile 文件打包鏡像

docker build -t wblog:v1.0 .

6、打包完成后,輸入 docker images 查看鏡像

image

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

image

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM