1. 程式人生 > 實用技巧 >愛了!阿里大神最佳總結“Flutter進階學習筆記”,理論與實戰

愛了!阿里大神最佳總結“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"]