目錄
###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包嘗試。