愛了!阿里大神最佳總結“Flutter進階學習筆記”,理論與實戰
1. docker初識
1.1 為什麼要用docker?
1.2. docker容器的優勢
更高效的利用系統資源
更快速的啟動時間
一致的執行環境
持續交付和部署
更輕鬆的遷移
2 docker三大概念
容器三大基本概念
映象 image
容器 container
倉庫 repository
docker整個生命週期就是這三個概念。
3. docker安裝
有兩種安裝方法
3.1 第一種 官方安裝(版本比較新, 但是可能比較慢)
官方教程如下,最正確安裝docker姿勢, 如果想要安裝官方版本就使用此方法
1.解除安裝舊版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine 2.設定儲存庫 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 3.安裝docker社群版 sudo yum install -y docker-ce 4.啟動關閉docker systemctl start docker
3.2 第二種 使用阿里雲的源, 下載安裝速度很快,但版本不是最新
3.2.1 確認阿里雲的yum原始檔
vim /etc/yum.repos.d/Centos-7.repo
3.2.2 使用yum開始安裝docker
yum install -y docker
3.2.3 檢視docker安裝版本
rpm -qi docker
4. docker基本使用命令
4.1.1 搜尋網上的docker映象
docker search hello-world
4.1.2 下載docker映象
docker pull docker.io/hello-world
4.1.3 檢視docker映象
docker官方更新了很多命令,不用慌,這兩個命令效果是一樣的,用哪個都行
docker images
docker image ls
4.1.4 執行docker映象
docker run fce
4.1.5 檢視正在執行的docker容器
docker container ls
4.1.6 檢視已經執行過的容器
docker ps -a
注意: 如果docker容器裡面沒有任何後臺程式執行的話,容器就會退出,掛掉
注意: 如果docker容器裡面沒有任何後臺程式執行的話,容器就會退出,掛掉
注意: 如果docker容器裡面沒有任何後臺程式執行的話,容器就會退出,掛掉
4.1.7 配置docker映象加速器
https://www.daocloud.io/mirror#accelerator-doc # 一條命令加速 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io # 這條命令其實就是改了docker的一個配置檔案裡面的註冊映象地址, 可以檢視一下 cat /etc/docker/daemon.json
注意: 這裡會遇到一個坑,上面的加速器命令會修改我們的/etc/docker/daemon.json檔案, 裡面是一個字典,這個字典裡面有語法錯誤,導致docker無法啟動(原因是因為多了一個逗號)
注意: 這裡會遇到一個坑,上面的加速器命令會修改我們的/etc/docker/daemon.json檔案, 裡面是一個字典,這個字典裡面有語法錯誤,導致docker無法啟動(原因是因為多了一個逗號)
注意: 這裡會遇到一個坑,上面的加速器命令會修改我們的/etc/docker/daemon.json檔案, 裡面是一個字典,這個字典裡面有語法錯誤,導致docker無法啟動(原因是因為多了一個逗號)
4.1.8 容器是執行應用程式的,所以必須要先有一個作業系統為基礎
執行一個在後臺的任務
docker run -d centos /bin/sh -c "while true;do echo 愛滴魔力轉圈圈; sleep 1;done"
4.1.9 不間斷列印容器的日誌資訊
docker logs -f 容器ID
4.1.10 進入容器命令(容器是有自己的微型作業系統的。微型linux)
docker exec -it e80 /bin/bash
4.1.11 互動式的執行一個容器,且進入容器(也就是開啟並進入一個新的容器)
docker run -it centos /bin/bash
假如你沒有centos這個映象的話,它會自動從網上下載下來並執行
4.1.12 刪除docker映象
docker rmi 映象ID
注意: 可能會無法成功刪除, 它會提示這個映象有一個依賴映象,你需要先刪除這個依賴映象,再刪除此映象
4.1.13 提交建立自定義的映象(docker container commit)
1.我們進入互動式的centos容器中,發現沒有vim命令
docker run -it centos /bin/bash
2.在當前容器中,安裝一個vim
yum install -y vim
3.安裝好vim之後,exit退出容器
exit
4.檢視剛才安裝好vim的容器記錄
docker container ls -a
5.提交這個容器,建立新的image
docker commit 059fdea031ba tiger/centos-vim
6.檢視映象檔案
[root@master /home]docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tiger/centos-vim latest fd2685ae25fe 5 minutes ago 348MB
4.1.14 匯出映象
docker save centos > /opt/centos.tar.gz
4.1.15 匯入映象
docker load < /opt/centos.tar.gz
4.1.16 啟動容器
docker start 容器ID
4.1.17 停止容器
docker stop 容器ID
4.1.18 新建容器並且啟動
1 新建一個容器並輸出hehe
docker run centos /bin/echo "hehe" # 這跟在本地直接執行 /bin/echo'hehe'
2 新建容器並自定義一個名字qishi
docker run --name qishi -it centos /bin/bash # 啟動一個bash終端,允許使用者進行互動。
4.1.19 執行一個ubuntu容器
docker run -it ubuntu /bin/bash
4.1.20 檢視所有的docker容器ID和映象ID
# 檢視所有的docker容器記錄ID
docker ps -aq
# 檢視所有的docker映象ID
docker images -aq
# 刪除所有的已經執行過的docker容器記錄
docker rm `docker ps -aq`
# 刪除所有的docker映象
docker rmi `docker images -aq`
注意: 這個引號不是單引號,是1左邊的這個小寫符號
4.1.21 檢視指定容器的埠對映
docker port 74a
檢視容器內的程序
docker top 74a
4.1.22 外部訪問容器
1 在容器內跑一個app.py程式, 執行在5000埠
2 使用-P引數隨機對映一個埠到虛擬機器上
docker run -d -P training/webapp python app.py
-P 引數會隨機對映埠到容器開放的網路埠
如果本地沒有這個映象,docker run會自動為我們下載映象
3 使用-p引數自定義一個埠到虛擬機器上, 如9000埠
docker run -d -p 9000:5000 training/webapp python app.py
4 我們可以通過虛擬機器的IP 192.168.12.249加埠9000進行訪問
4.1.23 釋出docker image到倉庫
1 docker提供了一個類似於github的倉庫dockerhub,
網址https://hub.docker.com/需要註冊使用
2 註冊docker id後,在linux中登入dockerhub
docker login
注意要保證image的tag是賬戶名,如果映象名字不對,需要改一下tag
docker tag tiger/centos-vim lxh661314/centos-vim
語法是: docker tag 倉庫名 lxh661314/倉庫名
3 推送docker image到dockerhub
docker push lxh661314/centos-cmd-exec:latest
4 在dockerhub中檢查映象
https://hub.docker.com/
5 刪除本地映象,測試下載pull 映象檔案
docker rmi -f d69
docker pull lxh661314/centos-entrypoint-exec
刪除映象和下載映象
5. 私有倉庫
5.1 私有倉庫搭建
5.1.1 官方提供的私有倉庫docker registry用法
https://yeasy.gitbooks.io/docker_practice/repository/registry.html
5.1.2 一條命令下載registry映象並且啟動私有倉庫容器
docker pull registry
私有倉庫會被建立在容器的/var/lib/registry下,因此通過-v引數將映象檔案儲存到本地的/opt/data/registry下
埠對映容器中的5000埠到宿主機的5000埠
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
5.1.3 檢查啟動的registry容器
docker ps
5.1.4 測試連線容器
telnet 192.168.1.197 5000
5.1.5 修改映象tag,以docker registry的地址埠開頭
docker tag qishi5/centos_vim 192.168.1.197:5000/qishi5_centos_vim
5.1.6 檢視docker映象,找到registry的映象
docker images
5.1.7 Docker 預設不允許非 HTTPS 方式推送映象。我們可以通過 Docker 的配置選項來取消這個限制,這裡必須寫正確json資料
[root@master /]# cat /etc/docker/daemon.json
新增一行配置
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["192.168.12.249:5000"]
}
寫入到docker服務中,寫入到[Service]配置塊中,載入此配置檔案
vim /lib/systemd/system/docker.service
新增一行配置
EnvironmentFile=-/etc/docker/daemon.json
5.1.8 修改了docker配置檔案,重新載入docker
systemctl daemon-reload
5.1.9 重啟docker
systemctl restart docker
注意,重啟docker服務,所有的容器都會掛掉
注意,重啟docker服務,所有的容器都會掛掉
注意,重啟docker服務,所有的容器都會掛掉
5.1.10 重啟了docker,剛才的registry容器程序掛掉了,因此重新啟動它
docker ps -a
docker start 容器id
5.1.11 推送本地映象
docker push 192.168.119.10:5000/hello-world
5.1.12 由於docker registry沒有web節目,但是提供了API資料
要想檢視已經上傳的映象, 通過以下連結訪問即可檢視:
官網教程:https://docs.docker.com/registry/spec/api/#listing-repositories
curl http://192.168.12.249:5000/v2/_catalog
或者瀏覽器訪問http://192.168.12.249:5000/v2/_catalog
5.1.13 刪除本地映象,從私有倉庫中下載
先修改一個映象的標籤
docker tag qishi/centos-vim 192.168.12.249:5000/qishi-centos-vim
上傳映象
docker push 192.168.12.249:5000/qishi-centos-vim
刪除本地映象
docker rmi -f `docker images -aq`
下載映象
docker pull 192.168.12.249:5000/hello-world
6. 利用dockerfile定製映象
6.1 一個簡單的shell指令碼
cd /opt
mkdir hehe2
cd hehe2
touch hehe.py
echo "print('呵呵你妹啊~~~')" > hehe.py
python3 hehe.py
6.2 dockerfile基本使用
1. FROM引數(指定基礎映象)
FROM scratch # 製作base image基礎映象,儘量使用官方的image作為base image
FROM centos # 以centos為基礎映象,進行二次構建映象
FROM ubuntu:14.04 # 帶有tag的base image
2. LABEL引數(標籤, 定義作者資訊)
LABEL version=“1.0” # 容器元資訊,幫助資訊,Metadata,類似於程式碼註釋
LABEL maintainer=“[email protected]"
3. RUN引數(是一個萬能指令,執行命令)
#對於複雜的RUN命令,避免無用的分層,多條命令用反斜線換行,合成一條命令!
RUN yum update && yum install -y vim \
Python-dev # 反斜線換行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”
4. WORKDIR引數(相當於linux的cd命令)
WORKDIR /root # 相當於linux的cd命令,改變目錄,儘量使用絕對路徑!!!不要用RUN cd
WORKDIR /test # 如果沒有就自動建立
WORKDIR demo # 再進入demo資料夾
RUN pwd # 列印結果應該是/test/demo
5. ADD引數(把宿主機的一個檔案,新增到容器空間內)
ADD /opt/django/manage.py /opt/ # 把宿主機的/opt/django/manage.py放到容器空間內的/opt/目錄下
ADD /opt/python3.6.tar.gz /opt/ # ADD的解壓檔案作用,將宿主機的/opt/下的python3.6.tar.gz解壓到容器內的/opt/目錄下
ADD and COPY
ADD hello / #把本地檔案新增到映象中,吧本地的hello可執行檔案拷貝到映象的/目錄
ADD test.tar.gz / #新增到根目錄並解壓
WORKDIR /root
ADD hello test/ # 進入/root/ 新增hello可執行命令到test目錄下,也就是/root/test/hello 一個絕對路徑
COPY hello test/ # 等同於上述ADD效果
6. COPY引數(拷貝指令)
# 將宿主機的檔案, 拷貝到容器內,但是沒有解壓縮的命令,儘量使用COPY,不要使用ADD
COPY filename /opt/
ADD與COPY
- 優先使用COPY命令
-ADD除了COPY功能還有解壓功能
新增遠端檔案/目錄使用curl或wget
7. ENV引數(docker的環境引數指令)
ENV # 環境變數,儘可能使用ENV增加可維護性
ENV MYSQL_VERSION 5.6 # 設定一個mysql常量,這個${MYSQL_VERSION}類似於全域性常量
RUN yum install -y mysql-server=“${MYSQL_VERSION}” # 如果版本號有變更,則只需要改這個常量就可以了
6.3 使用dockerfile自定製django映象
在/opt/docker目錄下面準備檔案
dockerfile配置檔案
FROM centos
FROM python:3.6.6
ADD CentOS-Base.repo /etc/yum.repos.d
ADD epel.repo /etc/yum.repos.d
RUN pip3 install setuptools
ADD Django-2.1.7.tar.gz /opt/
WORKDIR /opt/
RUN mv Django-2.1.7 django
WORKDIR /opt/django
RUN python3 setup.py install
WORKDIR /opt
RUN django-admin.py startproject qishidj
ADD run.sh /opt/qishidj/run.sh
RUN sed -i "s/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = \['\*'\]/g" /opt/qishidj/qishidj/settings.py
WORKDIR /opt/qishidj
RUN chmod 777 run.sh
EXPOSE 8000
CMD ["/bin/sh","run.sh"]