摘要:最近很火,所以,也跟著未來的大趨勢學下,并將應用到項目開發中。容器是完全使用沙箱機制,相互之間不會有任何接口類似的更重要的是容器性能開銷極低。在中搜索搜索的范圍是官方鏡像和所有個人公共鏡像。的應用都是以這種格式發布到倉庫中,供大家使用。
Docker 最近很火,所以,也跟著未來的大趨勢學下docker,并將docker 應用到項目開發中。一、什么是docker
Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從Apache2.0協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
那么應用容器長什么樣子呢,一個做好的應用容器長得就好像一個裝好了一組特定應用的虛擬機一樣。比如我現在想用MySQL那我就找個裝好MySQL的容器,運行起來,那么我就可以使用 MySQL了。
那么我直接裝個 MySQL不就好了,何必還需要這個容器這么詭異的概念?話是這么說,可是你要真裝MySQL的話可能要再裝一堆依賴庫,根據你的操作系統平臺和版本進行設置,有時候還要從源代碼編譯報出一堆莫名其妙的錯誤,可不是這么好裝。而且萬一你機器掛了,所有的東西都要重新來,可能還要把配置在重新弄一遍。但是有了容器,你就相當于有了一個可以運行起來的虛擬機,只要你能運行容器,MySQL的配置就全省了。而且一旦你想換臺機器,直接把這個容器端起來,再放到另一個機器就好了。硬件,操作系統,運行環境什么的都不需要考慮了。
在公司中的一個很大的用途就是可以保證線下的開發環境、測試環境和線上的生產環境一致。當年在 Baidu 經常碰到這樣的事情,開發把東西做好了給測試去測,一般會給一坨代碼和一個介紹上線步驟的上線單。結果代碼在測試機跑不起來,開發就跑來跑去看問題,一會兒啊這個配置文件忘了提交了,一會兒啊這個上線命令寫錯了。找到了一個 bug 提上去,開發一看,啊我怎么又忘了把這個命令寫在上線單上了。類似的事情在上線的時候還會發生,變成啊你這個軟件的版本和我機器上的不一樣……在 Amazon 的時候,由于一個開發直接擔任上述三個職位,而且有一套自動化部署的機制所以問題會少一點,但是上線的時候大家還是膽戰心驚。
若果利用容器的話,那么開發直接在容器里開發,提測的時候把整個容器給測試,測好了把改動改在容器里再上線就好了。通過容器,整個開發、測試和生產環境可以保持高度的一致。
此外容器也和VM一樣具有著一定的隔離性,各個容器之間的數據和內存空間相互隔離,可以保證一定的安全性。
三、安裝docker在 ubuntu 下使用 curl 命令進行安裝
sudo apt install -y curl;
sudo curl -sSL https://get.docker.com/ | sh;
windows 安裝請參考 docker 官網。
docker常用命令容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作運維 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
鏡像倉庫 — docker [login|pull|push|search]
本地鏡像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]
docker images
其中我們可以根據REPOSITORY來判斷這個鏡像是來自哪個服務器,如果沒有 / 則表示官方鏡像,類似于username/repos_name表示Github的個人公共庫,類似于regsistory.example.com:5000/repos_name則表示的是私服。
IMAGE ID列其實是縮寫,要顯示完整則帶上--no-trunc選項。
搜索的范圍是官方鏡像和所有個人公共鏡像。NAME列的 / 后面是倉庫的名字。
docker search sameersbn3、從docker registry server 中下拉image或repository(pull)
Usage: docker pull [OPTIONS] NAME[:TAG]
上面的命令需要注意,在docker v1.2版本以前,會下載官方鏡像的centos倉庫里的所有鏡像,而從v.13開始官方文檔里的說明變了:will pull the centos:latest image, its intermediate layers and any aliases of the same id,也就是只會下載tag為latest的鏡像(以及同一images id的其他tag)。
也可以明確指定具體的鏡像:
docker run 命令首先會從特定的image創之上create一層可寫的container,然后通過start命令來啟動它。停止的container可以重新啟動并保留原來的修改。run命令啟動參數有很多,以下是一些常規使用說明,更多部分請參考http://www.cnphp6.com/archive...
當利用 docker run 來創建容器時,Docker 在后臺運行的標準操作包括:
檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
利用鏡像創建并啟動一個容器
分配一個文件系統,并在只讀的鏡像層外面掛載一層可讀寫層
從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
從地址池配置一個 ip 地址給容器
執行用戶指定的應用程序
執行完畢后容器被終止
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
啟動一個本地鏡像:鏡像名REPOSITORY+鏡像TAG
> docker run -d sameersbn/postgresql:9.6-2 e527ef6698ea52bb78803facd5d2a6a8cbcdeb98ba052b3a0cdf78478d9acc535、停止運行容器
根據容器IDCONTAINER ID來使運行的容器停止 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
或者使用容器的別名來啟動:
docker start MyWordPress
更多命令請看:docker常用命令詳解
四、幾個重要的概念在使用docker時,我們得先弄清楚docker的幾個重要的名詞。
Docker生態Docker生態就像 iPhone 的生態一樣,Docker倉庫相當于 IPhone 的 App Store,docker自身程序相當于IOS系統。
鏡像與容器鏡像(image):指的是以分層的、可以被 LXC/libcontainer 理解的文件存儲格式。Docker的應用都是以這種格式發布到Docker倉庫中,供大家使用。
容器(container):把應用鏡像從 Docker 倉庫下載到本地機器上,以鏡像為模板,在一個容器類虛擬機中把這個應用啟動,這個虛擬機叫做容器。
可以先簡單的理解,倉庫中的應用都以鏡像存在,從倉庫中拉取鏡像到本地的,叫容器。
五、安裝鏡像docker-gitlabgitlab環境配置要求比較高,可用內存必須2G以上,2核CPU,否則跑不起來。
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 是宿主機的環境,/var/lib/為容器環境.
OK,安裝好之后,我們可以通過命令來查看 docker 進程
docker ps
再次啟動容器命令:
前邊我們已經安裝鏡像到本地,如果關閉docker服務之后,容器就會停止運行,再次啟動docker之后,我們不需要再次使用 docker run -d images,而只需啟動容器即可。
docker ps:查看運行的容器。
docker ps -a:查看所有已經安裝的容器
開啟容器:
docker start gitlab-postgresql2.測試gitlab
使用 ifconfig 命令查看本機IP,因為gitlab默認的服務為 10080,所以,我們可以根據我們的IP和端口訪問到gitlab服務:http://192.168.1.101:10080/
gitlab頁面:
在 gitlab 上新建一個 test 測試庫:
使用 docker 搭建 gitlab服務是不是超級方便,不用做什么配置^_^。
相關文章:GitLab的簡單使用
六、項目管理系統RedmineRedmine 是一套跨平臺的管理系統,它通過“項目(project)”的形式把成員、任務(問題)、文檔、討論及各種形式的資源整合在一起,大家參與更新任務、文檔等內容來推動項目的進度,另外,它還集成了wiki文檔、版本控制、bug跟蹤等功能。
1.搭建Redmine服務在這里,我們使用 sameersbn/docker-redmine 鏡像,項目地址為:https://github.com/sameersbn/...。
拉取鏡像:
docker pull sameersbn/redmine:latest
快讀啟動:
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:latest2.測試
Redmine
Docker指令中,我們把Redmine的對外服務端口映射到10083,所以,我們可以通過
訪問該地址:http://192.168.1.101:10083/,查看該服務是否安裝成功。
安裝成功,^_^
七、docker容器名稱沖突我們使用ps -a這個命令,我們可以觀察到gitlab-postgresql的狀態為已經存在了。
我們用rm命令刪除這個容器,如下面命令所示:
sudo docker rm gitlab-postgresql
重新建立gitlab-postgresql這個容器:
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 容器名稱沖突問題解決
八、掛載目錄使用鏡像 nginx:latest,以后臺模式啟動一個容器,將容器的 80 端口映射到主機的 80 端口,主機的目錄 /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
如果直接掛載會報出這樣的錯誤:
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掛載目錄時,需要先在Docker->preference中添加該目錄,才能進行掛載!
再重試一次掛載:
? tensorflow docker run -it -v /Users/kaiyiwang/Code/ai/notebooks:/notebooks -d tensorflow/tensorflow d1fceb76e44c4050c878a6ce996f59d8252c59d082293674db2ac043e8607f14 ? tensorflow
可以看到掛載成功
九、進入容器內部// 進入容器內部 sudo docker exec -it c7efe /bin/bash
c7efe 為容器ID前幾位,通過上邊的命令即可進入容器內部。
進入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重啟
在宿主機環境下重啟容器或整個docker
[corwien@lnp php_log]$ sudo docker ps # 查看docker進程 [corwien@lnp php_log]$ sudo docker restart bfc6 # docker 容器重啟 # service docker restart sudo systemctl restart docker 如果網絡斷了,則重啟docker就可以了
查看DNS(docker容器在創建實例的時候會拷貝宿主機的到容器里邊,如果宿主機的DNS改變了,則需要重新加載容器的)
[root@bfc6f9d528a5 /]# cat /etc/resolv.conf
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27133.html
摘要:當前版本針對于安裝版概要整體流程貫通,基本可以達到實用級別。仍舊有很多需要提高的地方發布構建時部署上線服務器卡頓嚴重,基本不可以多項目發布。 該文章旨在描述從零開始搭建環境,中間遇到的問題以及最終的經驗總結。當前版本針對于2.0 docker安裝版 概要 整體流程貫通,基本可以達到實用級別。滿足2-5臺服務器,少量的應用部署是完全可以的,但達到一定規模之后則Walle和Jenkins...
摘要:安裝環境后,從官網下載。配置首先更換下鏡像源,國內的網絡情況得適應,建議使用阿里云鏡像。到阿里云官網注冊個賬戶,有就直接進入控制臺。 showImg(https://segmentfault.com/img/remote/1460000013793047); 在上一篇[[.net core項目實戰之回顧總結]](http://www.bug2048.com/netcor...,從本篇開...
摘要:時間年月日星期六說明本文部分內容均來自慕課網。必填用于執行命令,當執行完畢后,將產生一個新的文件層。可選指定此鏡像啟動時默認執行命令。可選用于指定需要暴露的網絡端口號。可選向鏡像中掛載一個卷組。 時間:2017年09月16日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com 教學源碼:無 學習源碼:無 第一章:課程簡介 1-1 課程介紹 Docke...
閱讀 1997·2021-11-24 09:39
閱讀 990·2021-11-11 16:55
閱讀 1447·2021-10-09 09:43
閱讀 1433·2021-10-08 10:17
閱讀 1664·2021-08-25 09:41
閱讀 436·2019-08-30 13:02
閱讀 638·2019-08-29 15:14
閱讀 1016·2019-08-29 13:53