Docker使用手冊
學習途徑
- docker官網教程(學習一樣新東西最快的方法是去看官方文件,講解的清楚,教程簡單,但是包括的面十分的廣,只記錄自己覺得有用的命令,詳細請去官網檢視Docker start)
- 在docker的學習過程中我也其中也發現一篇很好的教程,簡潔明瞭,我也在這裡學到了很多,也摘錄總結在了這裡,推薦大家去Docker--從入門到實踐進行學習。也可以fork那個專案下來進行貢獻。如果網速有問題可以docker一個,直接本地訪問(教程提供的方法,我只是搬運一下)
$ docker pull dockerpracticecn/docker_practice
$ docker run -it --rm -p 4000:80 dockerpracticecn/docker_practice
訪問127.0.0.1:4000即可
手冊內容
Docker的安裝(老規矩)
普通安裝方式
sudo apt-get update
sudo apt-get install docker.io
但是上面的下載的版本會比較低,所以建議用下面這種方式
sudo apt-get install curl
curl -sSL https://get.docker.com/ | sh
下載完畢啟動Docker的守護程式
sudo service docker start
檢查Docker是否安裝成功(這是執行了一個容器,後面會有解釋)
sduo docker run hello-world
如果最終提示Hello from Docker! 如圖所示則表明docker安裝成功
Docker試水(初級篇)
10分鐘小任務認識Docker
- 檢視版本號
docker version
- 查詢映象 (映象的全稱是
<username>/<repository>
)
docker search tutorial
或者可以嘗試
docker search ubuntu
- 下載映象
docker pull learn/tutorial
- 用docker run來建立和執行docker容器(docker可以建立容器並在容器中執行指定的命令)
docker run learn/tutorial echo "hello world"
- 檢視所有容器(加上 -l 可以檢視最新建立的容器)
docker ps
- 執行並修改容器(給原容器安裝ping)
docker run learn/tutorial apt-get install -y ping
- 通過docker ps -l找出安裝過ping包的容器的ID號(-l 是last,找出最新建立的容器)
docker ps -l
- 將安裝過ping包的容器提交為新的映象,這時會返回一個新的ID便是新生成的映象的ID(意思是把容器打包成映象,因為平時都是把映象開啟變成容器,這裡相當於我們對容器進行了修改,想讓更多的人來用,所以我們把我們修改後的容器變成了映象。映象易於傳播,但是容器不行,)
docker commit {containId} {new image name}
docker commit 09c2e9353f01 yugougou/ping
- 基於新的映象建立容器並在容器中執行 ping www.google.com這條指令(新映象要使用全名 yugougou/ping)
docker run yugougou/ping ping www.google.com
- 查詢容器資訊
docker ps 查詢所有執行的容器
docker inspect a102 檢視單個容器的資訊(根據docker ps列出的容器名,選取前三四個字元即可)
- 新映象上傳倉庫
docker images 查詢本機的映象列表
查詢結果中有yugoguou/image這個映象
所以把映象推送到Docker官倉(這裡有個許可權的要求,要求你要在docker hub上有註冊過 並輸入使用者名稱密碼才可以進行上傳)
docker push yugougou/ping
Docker試水 中級篇
建立映象
首先說明一下 docker中有幾個比較重要的概念,『映象』,『映象標籤』,『容器』,『映象倉庫』,『映象倉庫源』。我簡單說下自己的理解。
映象就是一個模子,我們可以通過這個模子(映象)來建立成品(容器),相同的模子(映象)建立的成品(容器)都是一樣的,而且不同的模子(映象)都是有編號(映象標籤)的。我們可以把我們的模子(映象)放存放到倉庫(映象倉庫)中,這樣其他人也可以用。而且呢,倉庫(映象倉庫)一般都是放在一個大的廠子(映象倉庫源)裡來管理的,以此保證我們的模子(映象)不會因為太多而管理混亂。
所以總結一下就是:我們可以在這個工廠(映象倉庫源)的倉庫(映象倉庫)中根據標籤(映象標籤)拿到我們需要的模子(映象),來製作生成我們的成品(容器)。
比如我在生成好自己的映象並且想要push到映象倉庫的時候,就可以通過地址來看清這幾者的關係
docker push index.alauda.cn/alaudaorg/zpyuregis:syncimagealauda
index.docker.io /yugougou/get-started1 :zpyutestsync
REGISTORY REPOSITORY TAG
index.docker.io對應映象源
/yugougou/get-started1 對應映象倉庫
:zpyutestsync 對應映象標籤
這樣我就把自己的映象push到了dockerhub中使用者名稱為yugougou的get-started1的倉庫中,而且為了標識清楚這個映象,我給這個映象起的一個名字就是zpyutestsync.
相信通過以上的詳細介紹你應該還是沒有明白這些概念。。。。,如果真的不明白請再看一遍,如果真的還是不明白,就請動手敲一下程式碼,接下來我就教大家來建立映象,啟動一個服務,這樣應該就會更好的理解了。
現在我們知道了映象與容器的關係,知道了容器是由映象run起來的,那麼映象是怎麼來的呢,我們可不可以擁有自己的映象呢,當然可以,通過dockerfile我們就可以來搭建自己的映象了,我們先建立一下三個檔案:
Dockerfile
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
requirements.txt
Flask
Redis
app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
建立app(注意有個點)
docker build -t friendlyhello .
找到新建的映象
$ docker images
REPOSITORY TAG IMAGE ID
friendlyhello latest 326387cea39
跑起來
docker run -d -p 4000:80 friendlyhello
訪問http://localhost:4000即可,這樣你就有了一個flask框架的小的web應用程式了,真是TM的吃了一鯨,對的,就是這麼快。好的這個過程我們來慢慢分解一下,當然需要你有一些python開發的基礎。
先說一下這裡我們用到的幾個檔案,Dockerfile、requirements.txt、app.py,其實裡面與映象構建相關的只有Dockerfile,另外兩個檔案只是用來讓這個demo更炫酷一些而已,其實一個Dockerfile就完全可以製作一個映象了。我們看下Dockerfile裡的內容:
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
其實我想如果你英文稍微好一些,應該大概能明白是什麼意思,FROM的作用就是說我要做的這個映象是基於哪個基礎映象的,這裡我們的映象是基於python:2.7-slim這個基礎映象的,所以我們這個映象裡生來就有python的環境啦。
WORKDIR是說我的工作目錄在哪裡
ADD的作用是將現在所在目錄下的所有內容複製到當前工作目錄下(比如現在的app/)
CMD的意思是說當這個容器準備好了,就執行這個命令,也就是
python app.py
恩 有了這些基本內容你就建立了一個映象,並且已經把它run起來了,恭喜你呀
分享映象
自己好不容易建立了一個映象,想分享一下(就是為了演示昂 這種小破映象很難會有人真的去分享),腫麼辦。 好辦!這裡有個儲存映象的地方,就像github一樣,你可以在這上傳你的映象,也可以去下載別人的映象,他就是docker hub,到這裡註冊個賬號,繼續下面的步驟吧。
登入
docker login
打標籤
docker tag image username/repository:tag
舉個例子
docker tag image yugougou/get-started:part2
這裡的於狗狗是你的使用者名稱,get-started是倉庫名
公佈映象
docker push username/repository:tag
例如
docker push yugougou/get-started:part2
測試(拉一把 看看能不能跑起來)
docker run -p 4000:80 username/repository:tag
例如一個
docker run -p 4000:80 yugougou/get-started:part2
如果能成功跑起來,那就沒什麼問題了,恭喜你已經學會簡單使用Docker了。
Docker編排工具 Compose
docker對compose的定義就是一種定義和執行多容器應用的工具
(Compose is a tool for defining and running multi-container Docker applications)
說大白話就是,上面我們們做的那個破映象根本不會有人來用,因為功能單一,不對,因為基本上沒什麼功能,但是如果要是想要玩個大的,做個功能多的映象,比如我們要自己弄一個容器化的Gitlab,Gitlab肯定是要依靠資料庫的吧,而且也需要個快取redis,那是不是要一個容器一個容器的慢慢的啟動呢,感覺有點麻煩呢,而且如果是稍微大點的容器化平臺的公司,可能要管理成千上萬個容器,要是需要一個一個手動啟停的話,。。。。不敢想。於是docker給我們們一個這樣的工具,docker-compose。
大家先建立一個檔案,docker-compose.yaml,恩,這是一個yaml檔案,yaml檔案是一個這樣的檔案,這是阮一峰的教程,可以看一下。
postgresql:
image: sameersbn/postgresql:9.4-12
environment:
- DB_USER=gitlab
- DB_PASS=password
- DB_NAME=gitlabhq_production
redis:
image: sameersbn/redis:latest
gitlab:
image: sameersbn/gitlab:8.4.4
links:
- redis:redisio
- postgresql:postgresql
ports:
- "18008:80"
- "18009:22"
environment:
- GITLAB_PORT=18008
- GITLAB_SSH_PORT=18009
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphaumeric-srting
這個是gitlab的docker-compose檔案,只要一行程式碼,就能讓你擁有一個gitlab,
docker-compose up -d
這樣就會根據compose的內容去啟動容器,會先啟動postgresql,redis和gitlab,然後就可以去訪問18008這個埠了(當然這個埠你那裡可以改成你自己的埠),嗯嗯,好好玩吧
未完待續。。。
相關文章
- Linux使用手冊-vi使用手冊Linux
- TcpDump使用手冊TCP
- MyBatis 使用手冊MyBatis
- sqlmap使用手冊SQL
- Mybatis應用手冊MyBatis
- Tmux使用手冊UX
- Promise使用手冊Promise
- Redis使用手冊Redis
- iptables 使用手冊
- DotProject 使用手冊Project
- Zabbix 使用手冊
- git 基本使用手冊Git
- Cobra框架使用手冊框架
- Memcached Client 使用手冊client
- jQuery使用手冊(收藏)jQuery
- 儀器使用手冊
- PerfDog WEB端使用手冊Web
- 【C#】CsvHelper 使用手冊C#
- Room Database完全使用手冊OOMDatabase
- MongoDB和pymongo自用手冊MongoDB
- Git 快速使用手冊(二)Git
- less語法實用手冊
- Linux iptables應用手冊Linux
- gcc使用手冊(2)(轉)GC
- gcc使用手冊(3)(轉)GC
- gcc使用手冊(4)(轉)GC
- 《Redis 使用手冊》- 字串(PHP 版本)Redis字串PHP
- MySQL DBA 常用手冊小結MySql
- ThreadLocal 使用手冊 | 按需收藏thread
- Linux parallel 命令使用手冊LinuxParallel
- BeautifulSoup使用手冊(查詢篇)
- Kotlin 協程使用手冊Kotlin
- Gerrit和Jenkins使用手冊Jenkins
- MySQL DBA常用手冊小結MySql
- AutoMapper使用手冊(一)APP
- WebApiThrottle限流框架使用手冊WebAPI框架
- Docker叢集管理工具 - Kubernetes 使用手冊 (運維小結)Docker運維
- 【C#】AutoMapper 使用手冊C#APP