玩轉容器技術
- 2020 年 3 月 3 日
- 筆記
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 就必須要放文件在這個.的目錄下