成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Docker使用實(shí)戰(zhàn)總結(jié)

willin / 3026人閱讀

摘要:最近很火,所以,也跟著未來(lái)的大趨勢(shì)學(xué)下,并將應(yīng)用到項(xiàng)目開(kāi)發(fā)中。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口類似的更重要的是容器性能開(kāi)銷極低。在中搜索搜索的范圍是官方鏡像和所有個(gè)人公共鏡像。的應(yīng)用都是以這種格式發(fā)布到倉(cāng)庫(kù)中,供大家使用。

Docker 最近很火,所以,也跟著未來(lái)的大趨勢(shì)學(xué)下docker,并將docker 應(yīng)用到項(xiàng)目開(kāi)發(fā)中。
一、什么是docker

Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎,基于 Go 語(yǔ)言 并遵從Apache2.0協(xié)議開(kāi)源。Docker 可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實(shí)現(xiàn)虛擬化。
容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口(類似 iPhone 的 app),更重要的是容器性能開(kāi)銷極低。

二、為何要使用容器?

那么應(yīng)用容器長(zhǎng)什么樣子呢,一個(gè)做好的應(yīng)用容器長(zhǎng)得就好像一個(gè)裝好了一組特定應(yīng)用的虛擬機(jī)一樣。比如我現(xiàn)在想用MySQL那我就找個(gè)裝好MySQL的容器,運(yùn)行起來(lái),那么我就可以使用 MySQL了。

那么我直接裝個(gè) MySQL不就好了,何必還需要這個(gè)容器這么詭異的概念?話是這么說(shuō),可是你要真裝MySQL的話可能要再裝一堆依賴庫(kù),根據(jù)你的操作系統(tǒng)平臺(tái)和版本進(jìn)行設(shè)置,有時(shí)候還要從源代碼編譯報(bào)出一堆莫名其妙的錯(cuò)誤,可不是這么好裝。而且萬(wàn)一你機(jī)器掛了,所有的東西都要重新來(lái),可能還要把配置在重新弄一遍。但是有了容器,你就相當(dāng)于有了一個(gè)可以運(yùn)行起來(lái)的虛擬機(jī),只要你能運(yùn)行容器,MySQL的配置就全省了。而且一旦你想換臺(tái)機(jī)器,直接把這個(gè)容器端起來(lái),再放到另一個(gè)機(jī)器就好了。硬件,操作系統(tǒng),運(yùn)行環(huán)境什么的都不需要考慮了。

在公司中的一個(gè)很大的用途就是可以保證線下的開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境和線上的生產(chǎn)環(huán)境一致。當(dāng)年在 Baidu 經(jīng)常碰到這樣的事情,開(kāi)發(fā)把東西做好了給測(cè)試去測(cè),一般會(huì)給一坨代碼和一個(gè)介紹上線步驟的上線單。結(jié)果代碼在測(cè)試機(jī)跑不起來(lái),開(kāi)發(fā)就跑來(lái)跑去看問(wèn)題,一會(huì)兒啊這個(gè)配置文件忘了提交了,一會(huì)兒啊這個(gè)上線命令寫(xiě)錯(cuò)了。找到了一個(gè) bug 提上去,開(kāi)發(fā)一看,啊我怎么又忘了把這個(gè)命令寫(xiě)在上線單上了。類似的事情在上線的時(shí)候還會(huì)發(fā)生,變成啊你這個(gè)軟件的版本和我機(jī)器上的不一樣……在 Amazon 的時(shí)候,由于一個(gè)開(kāi)發(fā)直接擔(dān)任上述三個(gè)職位,而且有一套自動(dòng)化部署的機(jī)制所以問(wèn)題會(huì)少一點(diǎn),但是上線的時(shí)候大家還是膽戰(zhàn)心驚。

若果利用容器的話,那么開(kāi)發(fā)直接在容器里開(kāi)發(fā),提測(cè)的時(shí)候把整個(gè)容器給測(cè)試,測(cè)好了把改動(dòng)改在容器里再上線就好了。通過(guò)容器,整個(gè)開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境可以保持高度的一致。

此外容器也和VM一樣具有著一定的隔離性,各個(gè)容器之間的數(shù)據(jù)和內(nèi)存空間相互隔離,可以保證一定的安全性。

三、安裝docker

在 ubuntu 下使用 curl 命令進(jìn)行安裝

sudo apt install -y curl;
sudo curl -sSL https://get.docker.com/ | sh;

windows 安裝請(qǐng)參考 docker 官網(wǎng)。

docker常用命令

容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作運(yùn)維 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
鏡像倉(cāng)庫(kù) — docker [login|pull|push|search]
本地鏡像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]

1、列出機(jī)器上的鏡像(images):
docker images

其中我們可以根據(jù)REPOSITORY來(lái)判斷這個(gè)鏡像是來(lái)自哪個(gè)服務(wù)器,如果沒(méi)有 / 則表示官方鏡像,類似于username/repos_name表示Github的個(gè)人公共庫(kù),類似于regsistory.example.com:5000/repos_name則表示的是私服。
IMAGE ID列其實(shí)是縮寫(xiě),要顯示完整則帶上--no-trunc選項(xiàng)。

2、在docker index中搜索image(search)

搜索的范圍是官方鏡像和所有個(gè)人公共鏡像。NAME列的 / 后面是倉(cāng)庫(kù)的名字。

docker search sameersbn
3、從docker registry server 中下拉image或repository(pull)
Usage: docker pull [OPTIONS] NAME[:TAG]

上面的命令需要注意,在docker v1.2版本以前,會(huì)下載官方鏡像的centos倉(cāng)庫(kù)里的所有鏡像,而從v.13開(kāi)始官方文檔里的說(shuō)明變了:will pull the centos:latest image, its intermediate layers and any aliases of the same id,也就是只會(huì)下載tag為latest的鏡像(以及同一images id的其他tag)。
也可以明確指定具體的鏡像:

4、從image啟動(dòng)一個(gè)container(run)

docker run 命令首先會(huì)從特定的image創(chuàng)之上create一層可寫(xiě)的container,然后通過(guò)start命令來(lái)啟動(dòng)它。停止的container可以重新啟動(dòng)并保留原來(lái)的修改。run命令啟動(dòng)參數(shù)有很多,以下是一些常規(guī)使用說(shuō)明,更多部分請(qǐng)參考http://www.cnphp6.com/archive...
當(dāng)利用 docker run 來(lái)創(chuàng)建容器時(shí),Docker 在后臺(tái)運(yùn)行的標(biāo)準(zhǔn)操作包括:

檢查本地是否存在指定的鏡像,不存在就從公有倉(cāng)庫(kù)下載

利用鏡像創(chuàng)建并啟動(dòng)一個(gè)容器

分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外面掛載一層可讀寫(xiě)層

從宿主主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器中去

從地址池配置一個(gè) ip 地址給容器

執(zhí)行用戶指定的應(yīng)用程序

執(zhí)行完畢后容器被終止

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

啟動(dòng)一個(gè)本地鏡像:鏡像名REPOSITORY+鏡像TAG

> docker run -d sameersbn/postgresql:9.6-2
e527ef6698ea52bb78803facd5d2a6a8cbcdeb98ba052b3a0cdf78478d9acc53

5、停止運(yùn)行容器

根據(jù)容器IDCONTAINER ID來(lái)使運(yùn)行的容器停止 docker stop CONTAINER ID。

?  docker ps
CONTAINER ID        IMAGE                        COMMAND                 CREATED             STATUS              PORTS               NAMES
f72ed57c80f8        sameersbn/redis:latest       "/sbin/entrypoint.sh"   8 minutes ago       Up 8 minutes        6379/tcp            wonderful_bassi
e527ef6698ea        sameersbn/postgresql:9.6-2   "/sbin/entrypoint.sh"   14 minutes ago      Up 13 minutes       5432/tcp            pensive_keller
?  docker stop f72ed57c80f8

或者使用容器的別名來(lái)啟動(dòng):

docker start MyWordPress

更多命令請(qǐng)看:docker常用命令詳解

四、幾個(gè)重要的概念

在使用docker時(shí),我們得先弄清楚docker的幾個(gè)重要的名詞。

Docker生態(tài)

Docker生態(tài)就像 iPhone 的生態(tài)一樣,Docker倉(cāng)庫(kù)相當(dāng)于 IPhone 的 App Store,docker自身程序相當(dāng)于IOS系統(tǒng)

鏡像與容器

鏡像(image):指的是以分層的、可以被 LXC/libcontainer 理解的文件存儲(chǔ)格式。Docker的應(yīng)用都是以這種格式發(fā)布到Docker倉(cāng)庫(kù)中,供大家使用。
容器(container):把應(yīng)用鏡像從 Docker 倉(cāng)庫(kù)下載到本地機(jī)器上,以鏡像為模板,在一個(gè)容器類虛擬機(jī)中把這個(gè)應(yīng)用啟動(dòng),這個(gè)虛擬機(jī)叫做容器。

可以先簡(jiǎn)單的理解,倉(cāng)庫(kù)中的應(yīng)用都以鏡像存在,從倉(cāng)庫(kù)中拉取鏡像到本地的,叫容器。

五、安裝鏡像docker-gitlab

gitlab環(huán)境配置要求比較高,可用內(nèi)存必須2G以上,2核CPU,否則跑不起來(lái)。

1.安裝

gitlab 鏡像地址:docker-gitlab

Step 1. Launch a postgresql container

docker run --name gitlab-postgresql -d 
    --env "DB_NAME=gitlabhq_production" 
    --env "DB_USER=gitlab" --env "DB_PASS=password" 
    --env "DB_EXTENSION=pg_trgm" 
    --volume $HOME/docker/gitlab/postgresql:/var/lib/postgresql 
    sameersbn/postgresql:9.6-2

Step 2. Launch a redis container

docker run --name gitlab-redis -d 
    --volume $HOME/docker/gitlab/redis:/var/lib/redis 
    sameersbn/redis:latest

Step 3. Launch the gitlab container

docker run --name gitlab -d 
    --link gitlab-postgresql:postgresql --link gitlab-redis:redisio 
    --publish 10022:22 --publish 10080:80 
    --env "GITLAB_PORT=10080" --env "GITLAB_SSH_PORT=10022" 
    --env "GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string" 
    --env "GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string" 
    --env "GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string" 
    --volume $HOME/docker/gitlab/gitlab:/home/git/data 
    sameersbn/gitlab:10.2.2

--volume 方法解釋:

 --volume $HOME/docker/gitlab/postgresql:/var/lib/postgresql 
?  ~ echo $HOME
/Users/kaiyiwang

注意: --volume $HOME/docker 是宿主機(jī)的環(huán)境,/var/lib/為容器環(huán)境.

OK,安裝好之后,我們可以通過(guò)命令來(lái)查看 docker 進(jìn)程

docker ps

再次啟動(dòng)容器命令:
前邊我們已經(jīng)安裝鏡像到本地,如果關(guān)閉docker服務(wù)之后,容器就會(huì)停止運(yùn)行,再次啟動(dòng)docker之后,我們不需要再次使用 docker run -d images,而只需啟動(dòng)容器即可。

docker ps:查看運(yùn)行的容器。
docker ps -a:查看所有已經(jīng)安裝的容器

開(kāi)啟容器:

docker start gitlab-postgresql

2.測(cè)試gitlab

使用 ifconfig 命令查看本機(jī)IP,因?yàn)間itlab默認(rèn)的服務(wù)為 10080,所以,我們可以根據(jù)我們的IP和端口訪問(wèn)到gitlab服務(wù):http://192.168.1.101:10080/

gitlab頁(yè)面:

在 gitlab 上新建一個(gè) test 測(cè)試庫(kù):

使用 docker 搭建 gitlab服務(wù)是不是超級(jí)方便,不用做什么配置^_^。

相關(guān)文章:GitLab的簡(jiǎn)單使用

六、項(xiàng)目管理系統(tǒng)Redmine

Redmine 是一套跨平臺(tái)的管理系統(tǒng),它通過(guò)“項(xiàng)目(project)”的形式把成員、任務(wù)(問(wèn)題)、文檔、討論及各種形式的資源整合在一起,大家參與更新任務(wù)、文檔等內(nèi)容來(lái)推動(dòng)項(xiàng)目的進(jìn)度,另外,它還集成了wiki文檔、版本控制、bug跟蹤等功能。

1.搭建Redmine服務(wù)

在這里,我們使用 sameersbn/docker-redmine 鏡像,項(xiàng)目地址為:https://github.com/sameersbn/...。

拉取鏡像:

docker pull sameersbn/redmine:latest

快讀啟動(dòng):

Step 1. Launch a postgresql container

docker run --name=postgresql-redmine -d 
  --env="DB_NAME=redmine_production" 
  --env="DB_USER=redmine" --env="DB_PASS=password" 
  --volume=$HOME/docker/redmine/postgresql:/var/lib/postgresql 
  sameersbn/postgresql:9.6-2

Step 2. Launch the redmine container

docker run --name=redmine -d 
  --link=postgresql-redmine:postgresql --publish=10083:80 
  --env="REDMINE_PORT=10083" 
  --volume=$HOME/docker/redmine/redmine:/home/redmine/data 
  sameersbn/redmine:latest
2.測(cè)試

Redmine
Docker指令中,我們把Redmine的對(duì)外服務(wù)端口映射到10083,所以,我們可以通過(guò)
訪問(wèn)該地址:http://192.168.1.101:10083/,查看該服務(wù)是否安裝成功。

安裝成功,^_^

七、docker容器名稱沖突

我們使用ps -a這個(gè)命令,我們可以觀察到gitlab-postgresql的狀態(tài)為已經(jīng)存在了。

我們用rm命令刪除這個(gè)容器,如下面命令所示:

sudo docker rm gitlab-postgresql

重新建立gitlab-postgresql這個(gè)容器:

docker run --name gitlab-postgresql -d 
    --env "DB_NAME=gitlabhq_production" 
    --env "DB_USER=gitlab" --env "DB_PASS=password" 
    --env "DB_EXTENSION=pg_trgm" 
    --volume $HOME/docker/gitlab/postgresql:/var/lib/postgresql 
    sameersbn/postgresql:9.6-2

docker 容器名稱沖突問(wèn)題解決

八、掛載目錄

使用鏡像 nginx:latest,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 80 端口映射到主機(jī)的 80 端口,主機(jī)的目錄 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest

將Mac的本地目錄掛栽倒容器tensorflow/tensorflow/notebooks目錄

docker run -it  -v  /Users/kaiyiwang/Code/ai/notebooks:/notebooks -d tensorflow/tensorflow

如果直接掛載會(huì)報(bào)出這樣的錯(cuò)誤:

44a574c965c83688221798c5d70fff2a7badd3aad04dd071246d8f487bda5225
docker: Error response from daemon: Mounts denied:
The path /AI/tensorflow
is not shared from OS X and is not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.

在mac上面使用Docker掛載目錄時(shí),需要先在Docker->preference中添加該目錄,才能進(jìn)行掛載!

再重試一次掛載:

?  tensorflow docker run -it  -v  /Users/kaiyiwang/Code/ai/notebooks:/notebooks -d tensorflow/tensorflow
d1fceb76e44c4050c878a6ce996f59d8252c59d082293674db2ac043e8607f14
?  tensorflow

可以看到掛載成功

九、進(jìn)入容器內(nèi)部
// 進(jìn)入容器內(nèi)部
sudo docker exec -it c7efe /bin/bash

c7efe 為容器ID前幾位,通過(guò)上邊的命令即可進(jìn)入容器內(nèi)部。

進(jìn)入jupyter
?  tensorflow docker exec -it c7efe /bin/bash
root@c7efe77f377a:/notebooks#
root@c7efe77f377a:/notebooks# jupyter notebook list
Currently running servers:
http://localhost:8888/?token=44077e3f129fdbf0b26676b5414a36ce8b6a56627ad84a6e :: /notebooks
root@c7efe77f377a:/notebooks#
十、Docker重啟

在宿主機(jī)環(huán)境下重啟容器或整個(gè)docker

[corwien@lnp php_log]$ sudo docker ps    # 查看docker進(jìn)程
[corwien@lnp php_log]$ sudo docker restart bfc6    # docker 容器重啟
# service docker restart
sudo systemctl restart docker   如果網(wǎng)絡(luò)斷了,則重啟docker就可以了

查看DNS(docker容器在創(chuàng)建實(shí)例的時(shí)候會(huì)拷貝宿主機(jī)的到容器里邊,如果宿主機(jī)的DNS改變了,則需要重新加載容器的)

[root@bfc6f9d528a5 /]# cat /etc/resolv.conf

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27133.html

相關(guān)文章

  • DevOps 基于Walle的小型持續(xù)集成實(shí)戰(zhàn)(七)總結(jié)

    摘要:當(dāng)前版本針對(duì)于安裝版概要整體流程貫通,基本可以達(dá)到實(shí)用級(jí)別。仍舊有很多需要提高的地方發(fā)布構(gòu)建時(shí)部署上線服務(wù)器卡頓嚴(yán)重,基本不可以多項(xiàng)目發(fā)布。 該文章旨在描述從零開(kāi)始搭建環(huán)境,中間遇到的問(wèn)題以及最終的經(jīng)驗(yàn)總結(jié)。當(dāng)前版本針對(duì)于2.0 docker安裝版 概要 整體流程貫通,基本可以達(dá)到實(shí)用級(jí)別。滿足2-5臺(tái)服務(wù)器,少量的應(yīng)用部署是完全可以的,但達(dá)到一定規(guī)模之后則Walle和Jenkins...

    iliyaku 評(píng)論0 收藏0
  • .net core項(xiàng)目實(shí)戰(zhàn)之開(kāi)發(fā)環(huán)境搭建

    摘要:安裝環(huán)境后,從官網(wǎng)下載。配置首先更換下鏡像源,國(guó)內(nèi)的網(wǎng)絡(luò)情況得適應(yīng),建議使用阿里云鏡像。到阿里云官網(wǎng)注冊(cè)個(gè)賬戶,有就直接進(jìn)入控制臺(tái)。 showImg(https://segmentfault.com/img/remote/1460000013793047); 在上一篇[[.net core項(xiàng)目實(shí)戰(zhàn)之回顧總結(jié)]](http://www.bug2048.com/netcor...,從本篇開(kāi)...

    Dongjie_Liu 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Docker入門》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個(gè)新的文件層??蛇x指定此鏡像啟動(dòng)時(shí)默認(rèn)執(zhí)行命令??蛇x用于指定需要暴露的網(wǎng)絡(luò)端口號(hào)??蛇x向鏡像中掛載一個(gè)卷組。 時(shí)間:2017年09月16日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無(wú) 學(xué)習(xí)源碼:無(wú) 第一章:課程簡(jiǎn)介 1-1 課程介紹 Docke...

    CoorChice 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<