1. 程式人生 > 其它 >docker 的一些基礎概念

docker 的一些基礎概念

docker command
systemctl start docker
systemctl restart docker
systemctl enable docker
配置加速映象
新增配置
vi /etc/docker/daemmon.json
{
"registry-mirrors":[
"http://hub-mirror.c.163.com"
]
}
載入配置
systemctl daemon-reload
重啟docker
systemctl restart docker

docker ps -a 檢視所有容器程序
docker rm xxxxxxxx 移除容器xxxxxxxx
docker rmi hello-world 移除hello-world映象

docker 映象相關的命令 docker pull --help
從docker 倉庫獲取映象 docker pull [選項]

docker image ls 列出所有下載過的映象(docker images)
[root@pikzas docker]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 065cf14a189c 4 weeks ago 135MB
hello-world latest d1165f221234 4 months ago 13.3kB
ubuntu 096efd74bb89 9 months ago 127MB

[root@pikzas docker]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 1 262.3MB 262.3MB (99%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B

檢視映象 容器 資料卷所佔用空間
doceker system df
[root@pikzas docker]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 1 262.3MB 262.3MB (99%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B

倉庫名 和標籤都為none的映象為虛懸映象
docker image ls -f dangling=true
[root@pikzas pikzas]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
f0b57b1e7fd9 22 seconds ago 135MB
ubuntu 16.04 065cf14a189c 4 weeks ago 135MB
hello-world latest d1165f221234 4 months ago 13.3kB
ubuntu 096efd74bb89 9 months ago 127MB

虛懸映象是可以直接刪除的
可以用命令 docker image prune來刪除掉所有的虛懸映象

刪除本地映象
docker rmi [選項] <映象1> <映象2>
<映象> 可以是短ID 長ID 映象名 或者是映象摘要

映象查詢用 docker image ls -q
[root@pikzas pikzas]# docker image ls -q hello-world
d1165f221234

於是批量刪除可以結合以上兩個命令
docker image rm $(docker image ls -q xxx -f before=xxx:1.0) 刪除所有xxx:1.0之前的所有映象

docker 容器的操作
新建並啟動 或者啟動停止的機器
docker run
docker start
[root@pikzas ~]# docker run -it ubuntu:16.04 bash
root@4e2a8f71de37:/#

通過新增-d 引數來開啟後臺執行
[root@pikzas ~]# docker run -d hello-world
c11e78317c1f34b13d1c441a6998980ddce3be23b2b090ed3968ea4fefb5696f

docker logs 檢視後臺執行的容器日誌
[root@pikzas ~]# docker logs c11e78317c1f34b13d1c441a6998980ddce3be23b2b090ed3968ea4fefb5696f

Hello from Docker!
This message shows that your installation appears to be working correctly.

docker container stop 停止一個容器
docker container ls -a 列出所有停止執行的容器
docker container start 啟動一個容器
docker container restart 重新啟動一個
docker exec 進去執行中的容器

[root@pikzas ~]# docker exec -it 95d86d0cd867 bash
root@95d86d0cd867:/# ll
total 20
drwxr-xr-x 21 root root 4096 Jul 19 01:30 ./
drwxr-xr-x 21 root root 4096 Jul 19 01:30 ../
-rwxr-xr-x 1 root root 0 Jul 19 01:30 .dockerenv*
drwxr-xr-x 2 root root 4096 Jun 11 23:09 bin/
drwxr-xr-x 2 root root 6 Apr 12 2016 boot/
drwxr-xr-x 5 root root 360 Jul 19 01:32 dev/

docker export > x.zip 將指定的容器匯出到x.zip 為一個快照
docker import 匯入快照為本地映象
cat x.zip | docker import - 映象使用者/映象名稱:映象版本
同樣可以通過url 或者目錄來匯入
docker import http://study.163.com/image.tgz example/imagerepo

刪除容器(只有終止狀態的容易可以被刪除,執行狀態的不可刪除)
docker container rm ubuntu:16.04
強行要刪除執行狀態的容器 需要新增-f 強制停止容器

刪除所有停止狀態的容器
docker container prune
[root@pikzas ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e2a8f71de37 ubuntu:16.04 "bash" 2 hours ago Exited (127) About an hour ago focused_pasteur
971fde08741d hello-world "/hello" 12 hours ago Exited (0) 12 hours ago nostalgic_brahmagupta
[root@pikzas ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
^[[ADeleted Containers:
4e2a8f71de372dcdc8cde4c86eca83c673228b8fe9bd0b07c34e5a32d4cc0b1b
971fde08741dff0af5760d73f127eb8ad4c7fb9a97aac1220f45e22425d54c1c

Total reclaimed space: 28B
[root@pikzas ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@pikzas ~]#

dockfile 定製映象

  • 就是指定容器每一層需要的配置 然後以配置檔案的形式指定具體的細節
    FROM 命令
    RUN 命令
    COPY 命令
    ADD 命令
    CMD 命令
    ENV 命令 設定環境變數
    ARG 命令
    VOLUMN 命令 VOLUMN <路徑> docker 不推薦直接在容器內部寫檔案資料
    EXPOSE <埠> 宣告對映的埠
    WORKDIR <工作路徑> 指定當前工作的路徑
    ONBUILD
    docker save

docker hub 搭建私有倉庫
docker-registry
curl 127.0.0.1:5000/v2/_catalog檢視本地安裝的docker 內有哪些映象

Dockerfile 預設就是該檔案為配置
docker build -t myimage:1.0 .
構建當前目錄下的Dockerfile 為一個新的映象並命名為myimage版本為1.0

DOCKER 建立資料卷
docker三種寫入資料的方式
資料卷 掛載主機目錄 記憶體

建立資料卷
docker volumn create my-volumn
docker volumn ls
docker volumn inspect my-volumn

docker run 使用--mount

docker run --name session-web -d -p 8888:8080 --mount type=bind,source=/src/webapp,target=/opt/webapp session-web:latest

刪除資料卷
docker volumn rm test
一般情況下刪除容器不會刪除這些容器所使用的資料卷
但是還是可以通過docker rm -v 再刪除容器的同時候 一起刪除掉所使用的資料卷

docker volume prune 可以刪除無容器引用的資料卷

docker compose的使用

docker 的監控工具
類似於ELK 可以用CAdvisor + InfluxDB + Grafana
Grafana UI展示介面
InfluxDB 開源的時序化儲存的DB 用來儲存docker 執行的監控資料
CAdvisor 收集容器執行時的資料

部署InfluxDB 服務
docker run -d --name influxdb -p 8086:8086 -v /data/influxdb:/var/lib/influxdb --hostname=influxdb influxdb

訪問管理的客戶端
http://ip:8083

docker exec -it influxdb influx

CREATE DATABASE "test"
CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES

部署CAdvisor 服務
部署Granfana 服務
docker run -d -p 3000:3000 -v /data/grafana:/var/lib/grafana --link=influxdb:influxdb --name grafana grafana/grafana

言之有物