安裝docker
sudo wget -qO- https://get.docker.com/ | sh
將用戶添加到docker用戶組,不用root就可運行docker
$ sudo usermod -aG docker wongyaa
Docker架構
Docker daemon是核心程序,做各種各樣的docker操作,如下載docker的鏡像,運行容器等。通過客戶端命令交給Docker daemon來做實際操作。
客戶端通過命令通知守護線程,控制鏡像調用容器,並與遠程倉庫交互。
docker命令
調用image進入container命令:
docker run -i -t ubuntu:tag /bin/bash
dockerfile方法創建鏡像image
1、創建目錄及文件
mkdir dockertest // 創建一個docker測試目錄
cd dockertest // 進入docker測試目錄
touch Dockerfile // 創建Dockerfile
vim Dockerfile // 對Dockerfile進行編輯
2、文件內容
#基礎類
FROM alpine:latest
#作者
MAINTAINER author
#命令
CMD echo "hello docker!"
3、最後一步
// 創建images, -t:賦予標籤名爲hello_docker
docker build -t hello_docker .
// 查看是否成功生成images
docker images hello_docker
// 運行docker
docker run hello_docker
nginx相關的Dockerfile
創建dockertest目錄,新建Dockerfile文件,內容如下:
#基礎鏡像
FROM ubuntu
#作者
MAINTAINER Wongya
#加速下載,使用國內的鏡像
RUN sed -i 's/archive.ubuntu.com/mirros.ustc.edu.cn/g' /etc/apt/sources.list
#更新程序庫
RUN apt-get update
#安裝nginx,-y表示不提醒
RUN apt-get install -y nginx
#拷貝index.html到容器指定目錄
COPY index.html /var/www/html
#提供容器入口
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
#暴露監聽端口80
EXPOSE 80
同級目錄下創建index.html文件。
運行:
// -t:給出TAG wongya:用戶名
docker build -t wongya/hello-nginx .
// -d:守護進程化 -p:端口映射
docker run -d -p 80:80 wongya/hello-nginx
// 訪問測試
curl http://localhost
命令 | 用途 |
FROM | base image |
RUN | 執行命令 |
ADD | 添加文件 |
COPY | 拷貝文件 |
CMD | 執行命令 |
EXPOSE | 暴露端口 |
WORKDIR | 指定路徑 |
MAINTAINER | 維護者 |
ENV | 設置環境變量 |
ENTRYPOINT | 容器入口 |
USER | 指定用戶 |
VOLUME | mount point |
Volume
提供獨立於容器之外的持久化存儲
數據卷
數據卷是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,可以提供很多有用的特性:
- 數據卷可以在容器之間共享和重用
- 對數據卷的修改會立馬生效
- 對數據卷的更新,不會影響鏡像
- 卷會一直存在,直到沒有容器使用,類似於 Linux 下對目錄或文件進行 mount。
示例1:運行nginx容器,通過-v掛載一個卷
// --name nginx:賦予名字爲nginx
docker run -d --name nginx -v /usr/share/nginx/html nginx
// 列出容器所有相關信息
docker inspect nginx
找到Mounts,Source就是路徑,掛載到容器中的Destination中。
修改文件互相通信。
//進入容器的方法
docker exec -it name /bin/bash
示例2:將本地的一個目錄掛載到容器的一個數據卷中
首先準備好一個html目錄放在當前目錄下並在目錄中寫好一個index.html
// 將當前目錄下的html目錄映射到容器中
docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx
// 測試訪問
curl http://localhost
// 在本機host中修改index.html
vi html/index.html
// 測試訪問
curl http://localhost
示例3:創建一個僅有數據的容器,並將這個容器當做一個volume掛載在其他容器裏面去
僅有數據的容器可以被多個容器掛載,做到數據共享
// 創建data目錄
mkdir data
// 將當前目錄下的data目錄創建爲僅有數據的容器,目標目錄爲/var/mydata,名稱定義爲data_container。 ubuntu:容器的基礎鏡像
docker create -v $PWD/data:/var/mydata --name data_container ubuntu
// --volumes-from:從另外的容器掛載, /bin/bash:直接進入容器中
docker run -it --volumes-from data_container ubuntu /bin/bash
// 在mount列出的信息中可以找到自己放入的容器所屬的目錄mydata
mount
// 進入mydata文件夾
cd /var/mydata/
// 隨意創建一個文件
touch whatever.txt
// 退出容器
exit
// 查看data目錄的內容,可以看到剛纔在容器中創建的文件
ls data
鏡像倉庫(Registry)
Registry實際上是一個saas的服務,提供註冊並且存儲鏡像,使大家能夠進行鏡像的共享。
國內的一些倉庫:
daocloud
時速雲
aliyun
Registry交互命令
docker search whalesay // 搜索鏡像
docker pull whalesay // 拉取鏡像 docker
push myname/whalesay // 上傳鏡像
運行docker/whalesay
docker run docker/whalesay cowsay balabala