玩轉容器技術

#實踐中,瞭解鏡像和容器的操做html

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

##鏡像的幾個小操做 搜索鏡像 docker search nginx nginx

下載鏡像到local docker pull image_name c++

歸檔鏡像 docker image save image_name > xxx.tardocker

加載一個tar到環境中 docker image load < xxx.tarshell

##容器的基本操做centos

docker有個基本的要求:一個容器,一個application.bash

建立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 列出最新建立的容器 docker ps -l 查看容器資源使用率 docker states name 進入容器和啓停網絡

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

查看容器的日誌app

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

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

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

建立數據卷
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

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

##docker網絡模式 橋接 bridge 默認模式 容器建立後會建立個docker0的網橋,默認建立的容器都會添加到這個網橋(網關)

主機模式 --net=host 與宿主機公用一個network namespace 除了網絡不隔離 其餘都隔離,直接用host的ip訪問容器,可是docker host上的端口不能用了,網絡性能好 可是隔離性差,網絡不隔離,share端口範圍,文件系統和進程列表隔離

none 獨立network namespace,網絡隔離 可是ip得本身配

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

自定義 和bridge類似,須要先建立一個網橋,建立後有一個自定義DNS,能夠主機名和容器名互信

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

##製做鏡像Dockerfile 流程: 1.FROM 基於的鏡像 2.MAINTAINER 做者名/網址 3.RUN shell的命令 4.COPY 將文件copy到容器 5.EXPOSE 80 聲明端口 CMD ["run.sh"] 容器建立後執行命令,能夠被docker run指定的命令覆蓋

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;"]

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

原文出處:https://www.cnblogs.com/linux-error/p/12380514.html

相關文章
相關標籤/搜索