docker,就是學(xué)不會(huì)(一)

一. 介紹
Docker 是一個(gè)開源的應(yīng)用容器引擎,經(jīng)常與k8s一起使用。我看了好多遍docker還是記不住,所以記錄一下。
二. Docker應(yīng)用場(chǎng)景

  1. Web 應(yīng)用的自動(dòng)化打包和發(fā)布。
  2. 自動(dòng)化測(cè)試和持續(xù)集成、發(fā)布。
  3. 在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺(tái)應(yīng)用。
  4. 從頭編譯或者擴(kuò)展現(xiàn)有的 OpenShift 或 Cloud Foundry 平臺(tái)來搭建自己的 PaaS 環(huán)境。
    三. Docker架構(gòu)
    1.鏡像(Image):Docker 鏡像(Image),就相當(dāng)于是一個(gè) root 文件系統(tǒng)。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統(tǒng)的 root 文件系統(tǒng)。
    2.容器(Container):鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。
    3.倉庫(Repository):倉庫可看著一個(gè)代碼控制中心,用來保存鏡像。
    四.操作步驟
  5. MacOS Docker 安裝 (請(qǐng)選擇合適的操作系統(tǒng)安裝)
    (1)brew cask install docker (2) 鏡像加速 對(duì)于使用 Mac OS X 的用戶,下載docker App后,在任務(wù)欄點(diǎn)擊 Docker for mac 應(yīng)用圖標(biāo)-> Perferences...-> Daemon-> Registrymirrors。在列表中填寫加速器地址 https://registry.docker-cn.com 。修改完成之后,點(diǎn)擊 Apply&Restart 按鈕,Docker 就會(huì)重啟并應(yīng)用配置的鏡像地址了。 tips: 國內(nèi)加速器服務(wù) a.Docker官方提供的中國鏡像庫:https://registry.docker-cn.com b.七牛云加速器:https://reg-mirror.qiniu.com 五. 正式進(jìn)入使用 1.docker run image command => docker 執(zhí)行image鏡像 在容器(docker run 組成一個(gè)容器)里執(zhí)行command命令 egs: docker run ubuntu:15.10 /bin/echo "Hello world"
    Hello world
    Docker 以 ubuntu15.10 鏡像創(chuàng)建一個(gè)新容器,然后在容器里執(zhí)行 bin/echo "Hello world",然后輸出結(jié)果。
  6. 對(duì)話能力 docker run -i -t ubuntu:15.10 /bin/bash
    -t: 在新容器內(nèi)指定一個(gè)偽終端或終端。
    -i: 允許你對(duì)容器內(nèi)的標(biāo)準(zhǔn)輸入 (STDIN) 進(jìn)行交互。
    執(zhí)行后的環(huán)境為linux系統(tǒng),可以執(zhí)行l(wèi)inux命令。
    3.退出容器
    (1)exit
    (2)ctrl+D (mac: command +D )
    (3)停止容器 docker stop 容器ID| 容器Name(隨機(jī)分配)
    4.啟動(dòng)容器(后臺(tái)模式)
    docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
    輸出容器ID(唯一)
  7. docker ps (查看docker運(yùn)行中的容器狀態(tài))docker ps -a (查看所有容器 包含已停止運(yùn)行)
    6.docker logs 容器ID| 容器Name(隨機(jī)分配) 可以查看 當(dāng)前容器運(yùn)行的log日志
    7.容器 container 相關(guān)
    (1) docker pull image 如果我們本地沒有 ubuntu 鏡像,我們可以使用 docker pull 命令來載入 ubuntu 鏡像
    (2) 啟動(dòng)已停止運(yùn)行的容器 docker start 容器ID
    (3) 重啟 docker start 容器ID
    (4) 容器后臺(tái)運(yùn)行 docker run -d image command //-d 參數(shù)默認(rèn)不會(huì)進(jìn)入容器
    (5) 使用-d之后,會(huì)自動(dòng)進(jìn)入后臺(tái)。想要進(jìn)入容器
    【docker exec :在運(yùn)行的容器中執(zhí)行命令
    語法
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    OPTIONS說明:
    -d :分離模式: 在后臺(tái)運(yùn)行
    -i :即使沒有附加也保持STDIN 打開
    -t :分配一個(gè)偽終端
    實(shí)例
    在容器 mynginx 中以交互模式執(zhí)行容器內(nèi) /root/runoob.sh 腳本:
    $ docker exec -it mynginx /bin/sh /root/runoob.sh
    http://www.runoob.com/
    docker attach + 容器ID
    docker exec + 執(zhí)行命令(-i|t|d) 容器ID //推薦,因?yàn)榇嗣钔顺鋈萜鹘K端,不會(huì)導(dǎo)致容器的停止。
    (6) 導(dǎo)出容器 docker export +容器ID > export_name //導(dǎo)出容器 容器ID 快照到本地文件 ubuntu.tar(export_name)。
    (7)導(dǎo)入容器快照
    cat docker/ubuntu.tar | docker import - test/ubuntu:v1 //將快照文件 ubuntu.tar 導(dǎo)入到鏡像 test/ubuntu:v1
    (8) docker rm -f 1e560fca3906 //docker刪除Id:1e560fca3906的容器
    (9) docker container prune //清理掉所有處于終止?fàn)顟B(tài)的容器。
    (10) 指定端口號(hào)映射
    docker run -d -P training/webapp python app.py //在webapp上運(yùn)行app.py文件
    -P:將容器內(nèi)部使用的網(wǎng)絡(luò)端口映射到我們使用的主機(jī)上。
    -p: 是指定端口 大小寫不一樣 還可以指定 容器的網(wǎng)絡(luò)地址
    -p 5000:5000 || -p 127.0.0.1:5000:5000 兩種寫法
    默認(rèn)綁定都是tcp端口,如果需要綁定udp端口 -p 127.0.0.1:5000:5000/udp
    image.png
image.png

Docker 開放了 5000 端口(默認(rèn) Python Flask 端口)映射到主機(jī)端口 32768 上。


image.png

如果需要指定端口號(hào)
docker run -d -p 5000:5000 training/webapp python app.py //指定本地的端口號(hào)5000


image.png

頁面效果:


image.png

查看指定容器的端口映射
docker port 容器ID | 容器Name


image.png

(11) 查看應(yīng)用日志

image.png

-f: 讓 docker logs 像使用 tail -f 一樣來輸出容器內(nèi)部的標(biāo)準(zhǔn)輸出。 (現(xiàn)在不清楚 tail -f是什么意思)
(12) 查看容器的進(jìn)程 docker top 容器ID || 容器Name
(13) 查看Docker 容器的配置和狀態(tài)信息 docker inspect 容器ID || 容器Name
(14) 查詢最后一次創(chuàng)建的容器:docker ps -l
(15) 重啟已經(jīng)停止的容器 docker start 容器ID || 容器Name
(16) 重啟已經(jīng)停止的容器 docker restart 容器ID || 容器Name
(17) 移除容器(只能移除停止?fàn)顟B(tài)的容器)docker rm 容器ID || 容器Name
(18) 容器互聯(lián) 后續(xù)可以用docker compose 來管理依賴關(guān)系
docker run -d -P --name runoob training/webapp python app.py // --name runoob 指定runoob為此容器name
新建網(wǎng)絡(luò) docker network create -d bridge test-net
-d:參數(shù)指定 Docker 網(wǎng)絡(luò)類型,有 bridge、overlay。
查看當(dāng)前網(wǎng)絡(luò)列表 docker network ls
分別創(chuàng)建2個(gè)容器
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
安裝 ping :
apt-get update
apt install iputils-ping
進(jìn)入test1容器,ping test2 有回應(yīng)。test1 容器和 test2 容器建立了互聯(lián)關(guān)系。
(19) 容器配置dns 感覺目前用不到 先不看了
(20) docker rm (docker ps -q)
刪除所有容器
docker rm $(docker ps -aq)

  1. image 鏡像相關(guān)命令
    (1) 查看本地主機(jī)上的鏡像 docker images
    (2) 查找鏡像 docker search +keyword //會(huì)搜索出來和keyword相關(guān)的鏡像。默認(rèn)pull下來的是latest更新。
    (3) 刪除鏡像 docker rmi image
    (4) 創(chuàng)建鏡像 當(dāng)我們從 docker 鏡像倉庫中下載的鏡像不能滿足我們的需求時(shí),我們可以通過以下兩種方式對(duì)鏡像進(jìn)行更改。
    1、從已經(jīng)創(chuàng)建的容器中更新鏡像,并且提交這個(gè)鏡像 在運(yùn)行的容器內(nèi)使用 apt-get update 命令進(jìn)行更新
    當(dāng)更新后的符合需求的鏡像,我們可以提交容器副本。
    docker commit -m="has update(描述)" -a="creator(坐著)" 容器ID runoob/ubuntu:v2(指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名)
    2、使用 Dockerfile 指令來創(chuàng)建一個(gè)新的鏡像. 使用命令 docker build , 從零開始來創(chuàng)建一個(gè)新的鏡像。為此,我們需要?jiǎng)?chuàng)建一個(gè) Dockerfile 文件,其中包含一組指令來告訴 Docker 如何構(gòu)建我們的鏡像。
    docker build -t runoob/centos:6.7 .
    -t :指定要?jiǎng)?chuàng)建的目標(biāo)鏡像名
    "." :Dockerfile 文件所在目錄,可以指定Dockerfile 的絕對(duì)路徑
    runoob/centos:6.7 :新起的容器Name(可以通過 docker run -it runoob/centos:6.7 command 去創(chuàng)建容器)
    (5) 設(shè)置鏡像標(biāo)簽 docker tag 860c279d2fec runoob/centos:dev //給容器ID為860c279d2fec的runoob/centos這個(gè)鏡像 新增dev標(biāo)簽。

六. 踩到的坑及解決辦法
1."Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"

image.png

這個(gè)坑, 百度說是上次docker未正常關(guān)閉導(dǎo)致,解決辦法:
sudo service docker restart
sudo docker run hello-world

然而,直接報(bào)錯(cuò)


image.png

然后找了很久,發(fā)現(xiàn)本機(jī)的docker app沒有運(yùn)行,打開 docker就好了。

太多了 先寫這么多 倉庫管理 單獨(dú)寫。====晴晴要努力鴨

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容