天天看點

docker淺學筆記-docker安裝部署、鏡像管理、容器管理、dockerfile、端口映射

目錄

###docker安裝###

###docker鏡像管理###

###docker file建立nginx###

###docker容器管理###

###docker端口映射###

###FAQ###

      在我目前的了解中,容器是鏡像建立的運作執行個體。鏡像就像鍵值對的key、安裝虛拟機所需要的iso檔案、一所所房子;容器就像key索引對應的具體操作内容、安裝成功的作業系統、每個房間功能各異的人們。

###docker安裝###

1、安裝yum源,删除舊版本

[[email protected] ~]# cd /etc/yum.repos.d/

[[email protected] ~]# wget https://download.docker.com/linux/centos/docker-ce.repo

[[email protected] ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate dockerlogrotate docker-engine

2、安裝社群版docker

[[email protected] /]# yum install -y docker-ce

[[email protected] /]# systemctl enable docker 

[[email protected] /]# systemctl start docker

[[email protected] /]# docker -v 

Docker version 19.03.6, build 369ce74a3c

3、docker client和daemon分離

#修改docker啟動⽅式,要求加載配置⽂件啟動

[[email protected] /]# systemctl stop docker

[[email protected] /]# sed -i.bak '/^ExecStart=/c\ExecStart=\/usr\/bin\/dockerd' /usr/lib/systemd/system/docker.service

#設定docker配置⽂件,預設沒有,設定tcp允許連接配接,socket自身連接配接

[[email protected] ~]# cat /etc/docker/daemon.json 

{  "hosts":  ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]  }

#重載docker服務、重新開機docker⽣效配置

[[email protected]_manage01 ~]# systemctl daemon-reload

[[email protected]_manage01 ~]# systemctl restart docker

#用戶端連接配接docker daemon,執⾏指令

[[email protected]_node1 ~]# docker -H 192.168.192.128 images

###docker鏡像管理###

鏡像倉庫搜尋、下載下傳、檢視、詳細資訊、删除、标簽修改、導出、導入、管理指令

[[email protected] ~]# docker search centos

[[email protected] ~]# docker pull centos(FAQ1)

[[email protected] ~]# docker images

[[email protected] ~]# docker inspect centos

[[email protected] ~]# docker rmi centos

[[email protected] ~]# docker tag centos:latest centos:v1

[[email protected] ~]# docker save -o centos_base.tar centos

[[email protected] ~]# docker load -i centos_base.tar

[[email protected] ~]# docker image --help

###docker file建立nginx###

[root@manage01 ~]# wget http://nginx.org/download/nginx-1.17.0.tar.gz

[[email protected] ~]# vim Dockerfile

##定義基礎鏡像 FROM

FROM centos

MAINTAINER Rui

#上傳⽂件到容器 COPY or ADD (FAQ2)

#COPY 從目前⽬錄複制⽂件到容器. 隻是單純地複制⽂件. 

#ADD 從目前⽬錄複制⽂件到容器. 會⾃動處理⽬錄, 壓縮包等情況

COPY nginx-1.16.1.tar.gz /usr/src

#⽣成鏡像時運⾏的指令 RUN

RUN yum install -y vim gcc gcc-c++ glibc make autoconf openssl openssl-devel  libxslt-devel  gd gd-devel pcre pcre-devel&&yum clean all

RUN useradd -M -s /sbin/nologin nginx&&mkdir /data

RUN [ "mkdir","-p","/usr/local/nginx/conf" ]&&[ "mkdir","/usr/local/nginx/html" ]&&[ "mkdir","/usr/local/nginx/logs" ]&&[ "chown","nginx.nginx","/usr/local/nginx","-R" ]

#挂載本地⽬錄VOLUME

#建立⼀個可以從本地主機或其他容器挂載的挂載點

#⼀般⽤來存放資料庫和需要保持同步的資料

VOLUME ["/data"]

#進入目錄後解包

WORKDIR /usr/src

RUN ["tar","zxf","nginx-1.16.1.tar.gz"]

#源碼安裝nginx

WORKDIR /usr/src/nginx-1.16.1

RUN ./configure --prefix=/usr/local/nginx  --user=nginx --group=nginx && make && make install

#清理

WORKDIR /root

RUN [ "rm","-rf","/usr/src/nginx-1.16.1"]

#定義變量 ENV

ENV PATH /usr/local/nginx/sbin:$PATH

#輸出端口

EXPOSE 80

#容器啟動後執⾏的指令 CMD,避免nginx退出

CMD /bin/sh -c 'nginx -g "daemon off;"'

#執行

[[email protected] ~]# docker build -t centos-nginx:v1 .

###docker容器管理###

容器指令:檢視、詳細資訊、前背景建立執行、删除、執行指令、前台資訊輸出、top資訊、暫停、恢複、

重命名、檢視端口映射、列印日志、容器導出為鏡像、容器鏡像導入鏡像庫、退出、挂載資料卷(可做共享目錄,日志儲存等)

[[email protected] ~]# docker ps

[[email protected] ~]# docker inspect [容器名稱或者ID]

[[email protected] ~]# docker run -it --name centos7_5 centos /bin/bash || docker run -d --name centos7_6 centos

[[email protected] ~]# docker rm aafd2e0f68cc --force

[[email protected] ~]# docker exec  -it centos7_5 ls(-it僞終端)

[[email protected] ~]# docker attach centos7_5 

[[email protected] ~]# docker top  centos7_5 

[[email protected] ~]# docker pause  centos7_5

[[email protected] ~]# docker unpause centos7_5

[[email protected] ~]# docker rename  centos7_5 centos7.5

[[email protected] ~]# docker port  centos7.5

[[email protected] ~]# docker logs centos7.5

[[email protected] ~]# docker export -o centos7.tar centos7.5

[[email protected] ~]# docker import centos7.tar centos7.5v1:v1

[[email protected] ~]# exit   or  ctrl p+ ctrl q (不消亡容器程序)

[[email protected] ~]# docker run -it -v /data:/haha --name centos7_5 centos /bin/bash  

###docker端口映射###

建立鏡像和容器

[[email protected] /]# docker pull centos

直接使用bash建立容器後,報錯systemctl未知

[[email protected] /]# docker run --privileged -it -d  --name centos-lnmp centos  /usr/sbin/init

[[email protected] /]# docker exec -it centos-lnmp bash

[[email protected] /]# yum install -y nginx

FAQ:安裝好nginx後,docker run指令添加端口映射失敗,隻有在建立容器時候才能定義端口映射,目前解決方法為

1、将容易打包為鏡像;2、導入鏡像;3、重新建立容器并指定規則;4、檢視結果。還有一種修改配置檔案方法自行搜尋。

[[email protected] /]# docker export -o lnmp.tar centos-lnmp

[[email protected] /]# docker import lnmp.tar hahaha:v1

[[email protected] /]# docker run --privileged -it -d  -p 8888:80  --name hahaha-lnmp hahaha:v1  /usr/sbin/init

[[email protected] /]# docker exec -it hahaha-lnmp bash

[[email protected] /]# docker ps

###FAQ###

1、docker倉庫下載下傳鏡像到本地報錯

Error response from daemon: Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fcentos%3Apull&service=registry.docker.io: net/http: request canceled (Client.Timeout exceeded while awaiting headers)

#因為在下載下傳官方鏡像點的鏡像國内通路速度太慢,是以報錯添加

vim /etc/docker/daemon.json

{  "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]  }

sudo systemctl daemon-reload

sudo systemctl restart docker

2、上傳檔案到容器ADD報錯,COPY可以,報錯如下

tar: Error is not recoverable: exiting now

/或者/

failed to copy files: Error processing tar file(exit status 1): unexpected EOF

原因:

停止所有的container,删除其中的images:

docker stop $(docker ps -a -q)

docker rm $(docker ps -a -q)

發現需要上傳的包不完整,導緻解壓出錯,更換tar包嘗試。