[ Docker ] 基礎使用

1. docker-ce 版本安裝

Docker採用Linux(內核)技術,因此只能運行在Linux上,官方說Linux kernel至少3.8以上,且要是64位內核;html

1.1 新版 docker-ce 安裝

docker-ce 默認文件系統爲 overlay2  建議採用 CentOS 7.4 以上版本安裝。本次採用 CentOS 7.7 x64linux

 

(1)安裝依賴:nginx

yum install -y yum-utils device-mapper-persistent-data lvm2

(2)下載 yum 源文件redis

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo

(3)把軟件倉庫地址替換爲 TUNA:docker

sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

(4)查看 docker-ce 版本json

[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
Installed Packages
docker-ce.x86_64            3:19.03.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:19.03.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:18.09.0-3.el7                    docker-ce-stable 
docker-ce.x86_64            18.06.3.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.2.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.1.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.06.0.ce-3.el7                   docker-ce-stable 
docker-ce.x86_64            18.03.1.ce-1.el7.centos            docker-ce-stable 
docker-ce.x86_64            18.03.1.ce-1.el7.centos            @docker-ce-stable
…

yum install docker-ce  # 安裝最新版
yum install docekr-ce-<VERSION> # 安裝指定版本

這裏的安裝命令:centos

[root@192.168.118.14 ~]#yum install docker-ce-18.06.3.ce-3.el7 -y

啓動、中止等命令:bash

systemctl start|status|stop|enable docker

docker version 查看 docker 版本等信息服務器

 

 

docker info 查看 docker 詳細配置信息app

 

 

docker-ce 18.06 採用的默認磁盤存儲驅動爲 overlay2

爲 docker 運行 添加自定義參數:

[root@192.168.118.14 ~]#cat /etc/docker/daemon.json
{
    "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"],
    "hosts": ["tcp://192.168.118.14:2375", "unix:///var/run/docker.sock"],
    "data-root": "/data/docker-data",
    "storage-driver": "overlay2",
    "bip": "10.0.0.1/24",
    "fixed-cidr": "10.0.0.0/24"
}

daemon.json 配置文件嚴格遵照 json 語法格式,不可以使用單引號,所有爲雙引號。

參數說明:

"registry-mirrors"  設置 docker 下載鏡像加速,可配置多個;
 "hosts": 配置 docker daemon 監聽方式;
"data-root":修改docker存儲數據的位置,默認目錄爲 /var/lib/docker
"storage-driver":設定存儲驅動爲 overlay2 ,默認驅動爲 overlay2
"bip":設置 docker0 網橋地址爲10.0.0.1 此地址也爲容器網關地址;
"fixed-cidr":橋接到 docker0 上的容器地址範圍是 10.0.0.0/24

重啓 docker 服務

[root@192.168.118.14 ~]#systemctl restart docker

上面的配置修改可經過 docker info 查看。

 

2. Docker 基礎命令

 

 

 2.1 啓動容器

docker run

可經過 docker run --help 查看相關參數。

執行一次的容器:

 

 

啓動交互式容器:

 

 

測試通常這樣啓動容器

[root@192.168.118.14 ~]#docker run --name t1 --rm -it busybox /bin/sh

 

--name:爲容器命名
--rm:容器結束後,刪除該容器
-it:進入交互式模式

想要退出直接 exit 或者 Ctrl+D

 

2.2 查看容器

docker ps [-a][-l]
	-a 列出全部建立的容器
	-l 列出建立的最新的容器
     不加參數,列出docker中正在運行的容器

 

docker inspect 容器名或者容器ID

docker inspect t1  # 查看容器 t1 的詳細信息
… …

 

2.3 鏡像簡單管理

查找鏡像:

docker search 鏡像名

 

 

下載鏡像:

docker pull 鏡像名

 

docker images 查看本地鏡像文件

 

 

2.4 守護式容器

守護式容器:可以長期運行,沒有交互式會話,適合運行應用程序和服務

在使用容器時,必須有一個工做在前臺的守護進程且進程號爲 1

 

 

經過 docker inspect ngx_1 查看容器的 ip 地址

 

 

經過宿主機直接訪問:

 

 

經過上面 docker ps 查看 docker COMMAND 是一個運行在前臺的守護進程,經過 docker exec 命令進入到 容器內查看:

docker exec  可直接進入容器內部

 

 

nginx master 進程PID 爲 1

經過 docker logs 容器名 查看容器日誌:

 

nginx master 進程PID 爲 1

 

經過 docker logs 容器名 查看容器日誌:

 

 

經過 docker top 查看容器內進程

 

 

中止守護式容器:docker stop 容器名
直接殺掉容器:docker kill 容器名
刪除容器:docker rm 容器名

 

2.5 容器內的端口映射

docker [-P|-p]

-P: 將爲容器暴露的全部端口進行映射:docker run -P nginx
-p:指定映射容器的端口:docker run -p 80 nginx

 

 

訪問宿主機的映射端口:

 

 

docker run --name ngx_1 --rm -P -d nginx:alpine   --> 宿主機的端口將是隨機映射

 

 

docker run --name ngx_1 --rm -p 8080:80 -d nginx:alpine --> 11對應的映射,將容器的80端口映射到宿主機的 8080 端口

能夠綁定IP地址:

docker run --name ngx_1 --rm -p 192.168.118.14:8080:80 -d nginx:alpine

 

2.6 導入導出 Docker 鏡像

導出使用 docker save 容器名 > 容器名.tar.gz 
導入使用 docker load < 容器名.tar.gz 

 

save: 導出

 

 

load: 導入

 

 

3. 鏡像管理

 

3.1 基礎操做

查看鏡像:

docker images

 

 

TAG 的做用主要有兩點:

  1. 爲鏡像起一個容易理解的名字
  2. 能夠經過docker tag 來從新制定鏡像的倉庫,這樣在push時自動提交到倉庫
REPOSITORY:包含倉庫信息,如 super.com/centos , 表示 super.com 倉庫的 centos 名稱鏡像
TAG:同一個名稱的鏡像可能有多個版本,默認爲 latest 版本(最新版),TAG 就標明瞭版本
IMAGE ID:鏡像惟一 ID

 

所以能夠經過兩個方法肯定某個惟一的鏡像:

  1. REPOSITORY:TAG 如 super.com/centos
  2. IMAGE ID:如 19485c79a9bb

注意:若是直接使用 「REPOSITORY」,則默認「TAG」爲 「latest」,鏡像 redis 就標識爲 "redis:latest"

鏡像名 "REPOSITORY:TAG" 能夠用下面的命令重命名:

docker tag

 

注意:舊的鏡像和新的鏡像 IMAGE ID  是一致的。

拉取鏡像:
docker pull 鏡像名

推送鏡像:
docker push NAME[:TAG]

 

3.2 私有倉庫搭建及測試

192.168.118.14  私有倉庫服務器
192.168.118.15 客戶端

 

docker 確實很好用,一條命令,一個私有倉庫就搭建完畢。

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry

參數說明:

-d:後臺運行
-v:把宿主機的 /opt/registry目錄綁定 到 容器 /var/lib/registry 目錄
-p:映射端口;訪問宿主機的 5000端口就訪問到 registry 容器的服務
--name registry 建立容器命名爲 registry,能夠隨意定義
registry:經過這個鏡像啓動,若是本地沒有,則會從 dockerhub 上下載再次啓動

 

測試鏡像倉庫的全部鏡像:

curl http://192.168.118.14:5000/v2/_catalog

 

192.168.118.15

(1)修改 /etc/docker/daemon.json

添加:
    "insecure-registries": ["192.168.118.14:5000"]
重啓docker 服務
[root@192.168.118.15 ~]#systemctl restart docker

(2)爲本地的鏡像打標籤

docker tag busybox:latest 192.168.118.14:5000/busybox:v0.1-1

(3)將鏡像上傳到私有倉庫

docker push 192.168.118.14:5000/busybox

 

 

測試:

  刪除本地的鏡像,嘗試從 私有倉庫拉取鏡像

 

 

3.3 鏡像製做

(1)將容器變成鏡像

docker commit <container>[repo:tag]
-a, --author="" 指定製做鏡像的做者
-m, --message="" 記錄構建鏡像的信息
-p, --pause=true docker commit 命令會將正在執行的容器暫停,加上 -p 參數即不暫停運行的容器

優缺點:
方便快捷,
不規範,沒法自動化

 

示例:

[root@192.168.118.14 ~]#docker run --name t1 -it busybox /bin/sh
/ # echo "<h1>hello busybox server.</h1>" > /tmp/index.html
/ # httpd --help
BusyBox v1.31.0 (2019-09-04 17:25:45 UTC) multi-call binary.

Usage: httpd [-ifv[v]] [-c CONFFILE] [-p [IP:]PORT] [-u USER[:GRP]] [-r REALM] [-h HOME]
or httpd -d/-e/-m STRING

Listen for incoming HTTP requests

	-i		Inetd mode
	-f		Don't daemonize
	-v[v]		Verbose
	-p [IP:]PORT	Bind to IP:PORT (default *:80)
	-u USER[:GRP]	Set uid/gid after binding to port
	-r REALM	Authentication Realm for Basic Authentication
	-h HOME		Home directory (default .)
	-c FILE		Configuration file (default {/etc,HOME}/httpd.conf)
	-m STRING	MD5 crypt STRING
	-e STRING	HTML encode STRING
	-d STRING	URL decode STRING
/ # httpd -f -h /tmp/

 

開啓另外一個ssh會話,進行 commit 操做

 

 

4. docker 常見問題

ssh server 是否應該包含到鏡像中?

用 ssh server 管理容器並不理想,建議不用

 

一個容器究竟運行幾個程序?

一個程序比較好,由於docker 只管前臺程序是否正常

 

程序日誌輸出的問題?

經過 volume 或者 syslog 方式

相關文章
相關標籤/搜索