docker 生產環境基礎應用

項目背景

此項目是在已有項目基礎上,開發的一套相對獨立的系統。項目整體分爲三部分,前端、中間應用服務、流媒體服務。前端技術選型爲vue+elementui,中間應用服務爲.net core webapi+mysql+redis,流媒體服務爲第三方成熟應用。在項目開發完畢以後,起初部署方式爲在虛機上統一部署,倒也方便直觀。可是對我的而言,一直關注着docker,可是一直沒有應用到生產環境,因而就藉此機會更新下部署模式,採用docker。關於docker的簡介就沒必要多說了,網上的介紹不少,可是想要詳細瞭解,建議參考官方文檔html

docker架構

docker 包括三個基本概念,以下所示(採摘於菜鳥教程):
之因此有此介紹,是由於瞭解這幾個基本概念,在應用上會方便許多。前端

  1. 鏡像(Image):
    • Docker 鏡像(Image),就至關因而一個 root 文件系統。好比官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
  2. 容器(Container):
    • 鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例同樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器能夠被建立、啓動、中止、刪除、暫停等。
  3. 倉庫(Repository):
    • 倉庫可看着一個代碼控制中心,用來保存鏡像。

基礎架構圖

詳細信息自行百度vue

應用實戰

1. 安裝docker

博主所用主機爲centos 7+,關於docker的部署,可參考官方文檔mysql

1. 卸載舊版本
sudo yum remove docker \
                docker-client \
                docker-client-latest \            
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine
2. 安裝yum-utils軟件包、設置倉庫
sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
3. 安裝DOCKER引擎

sudo yum install docker-ce docker-ce-cli containerd.iolinux

4. 啓動docker

sudo systemctl start dockernginx

5.經過運行hello-world映像來驗證是否正確安裝了Docker Engine 。

sudo docker run hello-worldgit

6.登錄docker

執行命令 sudo docker login 輸入帳號、密碼登錄成功便可。web

2. 建立倉庫

倉庫就是存放鏡像的地方,博主所用倉庫爲docker-hub。固然還有不少廠商提供,若是考慮企業化建設,也能夠私有化搭建。 docker-hub官方地址
就像git同樣,自由建立私有倉庫。redis

3. 製做鏡像

本篇之前端項目爲例,製做鏡像發佈到倉庫。sql

前端項目採用的vue,進入打包好的dist文件中,建立Dockerfile文件,編寫內容以下:

FROM nginx
WORKDIR /app
COPY . /dist

from nginx 指的是 依賴於nginx, workdir /app 指的是設置工做目錄 copy . /dist 指的是 將dist文件夾中的內容 copy到外部 dist文件夾

完畢以後,在dist文件夾,即dockerfile文件所在文件夾,執行命令以下: docker build -t zy/bg:vmp-web . 建立鏡像。改命令意思是,製做一個隸屬於bg倉庫下的鏡像,而且爲改鏡像打標籤爲:vmp-web。 完畢以後,經過 docker images 查看已有鏡像

按照我我的習慣,一個倉庫包含web、server等多個項目的鏡像。經過tag進行區分。

鏡像製做完畢後,可經過push命令將 鏡像推送到遠程倉庫,便於後續使用。docker push zy/bg:vmp-web 推送完畢後,即可以在docker-hub中看到。

鏡像製做完畢以後,即可以運行了。docker run --name vmp-web -p 80:80 -d zy/bg:vmp-web -p 是進行端口映射,由於每個容器就是一個沙盒,能夠理解爲一個精簡版的虛機,80(外):80(容器) 就是把容器80端口,映射到外部的80端口。-d 是保持後臺運行。--name 設置容器名稱。 至此,訪問地址就能夠看到部署在容器內的應用了。
既然容器就是一臺精簡版的虛機,咱們固然也能夠進入他的文件系統。
進入docker容器有以下四種方式

  • docker attach
  • SSH
  • nsenter
  • exec
    在這裏前三種不是特別推薦使用,不方便且不適用於生產環境,推薦用exec的方式。exec命令相對簡單,操做方便適用生產。該命令必須適用於正在運行的容器,參數以下表所示:
參數 描述
--detach , -d 分離模式:在後臺運行命令
--detach-keys 覆蓋分離容器的鍵序列
--env , -e 設置環境變量
--interactive , -i 即便沒有附加也保持STDIN 打開
--privileged 賦予命令擴展權限
--tty , -t 分配僞TTY
--user , -u 用戶名或UID
--workdir , -w 容器內的工做目錄

以咱們剛纔建立的vmp-web容器爲例,咱們想要修改容器內nginx的配置信息,咱們能夠經過命令 docker exec -it vmp-web /bin/bash 進入容器,進入容器以後,就和日常操做linux幾乎一致了。經過vim nginx.conf修改時,會提示命令沒法找到,也是正常現象。由於該容器內只包含了程序運行的必須條件,並不包含vim。此時咱們想要修改容器nginx.conf,能夠經過從外部copy文件的形式,也能夠經過vim 直接修改。經過vim修改的時候,先在容器內安裝vim,經過命令apt-get install vim進行安裝,可是會提示以下信息:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim

並非命令有誤,輸入apt-get update命令,這條命令的做用就是同步 /etc/apt/sources.list/etc/apt/sources.list.d 中列出的源的索引。更新完畢後,再鍵入apt-get install vim便可。此時容器內已正常安裝vim,可以使用vim編輯nginx.conf文件了。
可是不少時候咱們想要直接從外部copy到容器內部,好比替換個文件,能夠採用docker cp 命令,該命令使用方式以下:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

從容器內部copy文件到外部,從外部copy文件到容器內部。
以剛纔運行的vmp-web容器爲例,想要將index.html copy到容器內部,docker cp index.html vmp-web:/ 改命令便是將index.html 文件複製到vmp-web容器內的根目錄。若是想要將此文件從容器內複製到外部,可 經過 docker cp vmp-web:/index.html /index.html命令,即將容器內index.html文件複製到根目錄中。想要退出docker容器,輸入exit命令便可。
至此,觸類旁通,想要將項目應用上docker已經差很少了,可是docker遠不止這麼簡單,目前所介紹的也僅僅是應用基礎。

docker 經常使用命令介紹

命令 使用方式 說明
login docker login -p -u 登錄docker倉庫
logout docker logout 退出
search docker search nginx 搜索nginx鏡像
build docker build -t zy/bg:vmp-web . 構建bg鏡像,打標籤爲vmp-web,其中zy 爲我的docker用戶名
pull docker pull nginx 拉取nginx鏡像
push docker push zy/bg:vmp-web 將本地生成的鏡像推送到bg倉庫,而且打標籤爲vmp-web
images docker images 列出全部鏡像
tag docker tag zy/bg:vmp-web vmp-webOld 標記鏡像
rmi docker rmi vmp-webOld 刪除鏡像
run docker run --name vmp-web -p 80:80 -d zy/bg:vmp-web 選擇鏡像啓動容器
ps docker ps 列出正在運行的容器,docker ps -a 列出全部容器,包括已經中止的容器
start docker start vmp-web 啓動容器
stop docker stop vmp-web 中止容器
kill docker kill vmp-web 殺掉容器
rm docker rm vmp-web 刪除容器
exec docker exec -it vmp-web /bin/bash 進入容器內部
cp docker cp index.html vmp-web:/ 將index.html文件複製到docker容器內部根目錄

更多命令請參考官方文檔

在本篇中,博主大都以name:tag 的形式刪除、中止等操做鏡像、容器,固然能夠以image id和container id的形式操做。而且在以id操做的時候,並不須要徹底鍵入id,之前幾位造成惟一標識便可。

docker知識點還有不少,須要繼續探索。且描述有諸多不足,且請見諒。

相關文章
相關標籤/搜索