­

玩轉容器技術

1.實踐中,了解鏡像和容器的操作

什麼是docker? Docker是一個開放源程式碼軟體項目,讓應用程式部署在軟體貨櫃下的工作可以自動化進行,藉此在Linux作業系統上,提供一個額外的軟體抽象層,以及作業系統層虛擬化的自動管理機制.

2.鏡像的幾個小操作

本次使用是docker v19.03.6

2.1.搜索鏡像
docker search nginx
2.2.下載鏡像到local
docker pull image_name
2.3.歸檔鏡像
docker image save image_name > xxx.tar
2.4.載入一個tar到環境中
docker image load < xxx.tar

3.容器的基本操作

docker有個基本的要求:一個容器,一個application.
3.1.創建nginx的容器
docker container run -d -e test=123 -p 8848:80 -h docker172.0 --name ngin3 -m="10m" --memory-swap="100m" --cpus=".5" --oom-kill-disable nginx
3.2.列出最新創建的容器
docker ps -l
3.3.查看容器資源使用率
docker states name
3.4.進入容器和啟停

docker exec -it container_id bash|sh  docker start/stop/restart container_id

3.5.查看容器的日誌

docker logs --tail=200 containerid  -d 後台運行  -e 設置環境變數  -p 設置埠轉發  -P 任意埠轉發  -h 設置容器的hostname  --name 設置容器的name  -m 分配記憶體  --cpus 分配的cpu core  --oom-kill-disable 禁用,記憶體溢出會自動kill進程,容器不加限制的話建議不加該選項

4.容器的數據卷

推薦兩種數據卷的方式volume,bind mount

4.1.volume

4.1.1.特點:
1.沒創建會自動創建,默認目錄/var/lib/docker/volume/_data
2.容器的文件系統與數據卷的數據共享,可以最容器的數據的持久化
3.可以共享多個容器,docker遷移
4.可以動態修改的文件

4.1.2.創建數據卷  docker volume create 卷名  Commands:    create      Create a volume    inspect     Display detailed information on one or more volumes    ls          List volumes    prune       Remove all unused local volumes    rm          Remove one or more volumes  docker container run -d --mount src=nginx_vol,dst=/usr/share/nginx/html  nginx 

4.2.bind mount

4.2.1.特點:
1.掛載宿主機任意的文件系統到容器,容器內目錄以宿主機那側為主
2.應用發布,主機文件系統與容器的需要一致
docker container run -d --mount type=bind,src=/mnt,dst=/usr/share/nginx/html nginx

5.docker網路模式

5.1.橋接 bridge
默認模式 容器創建後會創建個docker0的網橋,默認創建的容器都會添加到這個網橋(網關)

5.2.主機模式 –net=host
與宿主機公用一個network namespace 除了網路不隔離 其他都隔離,直接用host的ip訪問容器,但是docker host上的埠不能用了,網路性能好 但是隔離性差,網路不隔離,share埠範圍,文件系統和進程列表隔離

5.3.–net=none
獨立network namespace,網路隔離 但是ip得自己配

5.4.–net=container:name/ID
和設置的容器用一個network namespace ,網路不隔離,進程列表和文件系統都隔離

5.5.自定義
和bridge相似,需要先創建一個網橋,創建後有一個自定義DNS,可以主機名和容器名互信

docker network create 網路模式名稱  docker run -itd --name test1 --net=test busybox

6.製作鏡像Dockerfile

6.1.流程:
1.FROM 基於的鏡像
2.MAINTAINER 作者名/網址
3.RUN shell的命令
4.COPY 將文件copy到容器
5.EXPOSE 80 聲明埠
CMD ["run.sh"] 容器創建後執行命令
6.2.nginx基礎dockerfile

[root@192-168-1-218 dockerfile_workdir]# cat Dockerfile-nginx  FROM centos:7  MAINTAINER Mark  RUN yum -y install gcc gcc-c++ automake pcre pcre-devel zlip       zlib-devel openssl openssl-devel net-tools telnet wget curl &&       #優化      yum clean all && rm -fr /var/cache/yum/*    RUN wget http://nginx.org/download/nginx-1.17.8.tar.gz && tar xf nginx-1.17.8.tar.gz &&        cd  nginx-1.17.8 &&       ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module       --with-http_realip_module  --with-threads && make && make install &&       ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime  ENV PATH $PATH:/usr/local/nginx/sbin  #COPY /dockerfile_workdir/test.txt /root  WORKDIR /usr/local/nginx  EXPOSE 80  CMD ["nginx", "-g", "daemon off;"]

6.3.構建鏡像
docker build -t nginx:v1 -f Dockerfile-nginx .
-t 鏡像名和tag
-f Dockerfile的文件
. dockerfile里的文件位置,比如COPY 就必須要放文件在這個.的目錄下