1. 程式人生 > >docker命令集錦

docker命令集錦

當前 ridge des col script label 鏈接 重啟 ifconfig

sudo docker image ls    查看有哪些image鏡像
sudo docker run hello 運行image


刪除全部container
docker rm $(docker container ls -aq)
刪除全部退出的container
docker rm $(docker container ls -f "status=exited" -q)

docker container commit (docker commit)
docker image build (docker build)
docker build -t felix/ubuntu-stress . 創建image

docker exec -it fc02b5ea83bc /bin/bash 進入容器中運行命令
docker exec -it fc02b5ea83bc python3
docker exec -it fc02b5ea83bc ip a

docker ps -a 查看全部容器

docker inspect fc02b5ea83bc 顯示容器完整的信息

docker run -it ubuntu 交互模式下運行ubuntu這個image
# --name 起個別名 --link 鏈接到別名為test1的容器,之後可以用別名代替ip,比如說用在數據庫。
docker run -d --name test2 --link test1 ubuntu /bin/sh -c "while true;do sleep 3600;done"

docker logs fc02b5ea83bc 查看容器的日誌

docker network inspect fc02b5ea83bc 獲取鏡像的網絡元數據
docker network ls    查看網絡

生成新的image建議都通過Dockerfile來生成
例如:
技術分享圖片
FROM ubuntu
RUN apt-get update
RUN apt-get install -y vim
Dockerfile例子 技術分享圖片
FROM ubuntu
RUN apt-get update && apt-get install -y stress
ENTRYPOINT ["/usr/bin/stress"]
CMD []
docker 命令構建行工具例子 技術分享圖片
docker network create -d bridge my-bridge   # 創建自己的bridge網絡
docker run 
-d --name test3 --network my-bridge ubuntu # 創建時將默認網絡bridge鏈接到自己創建的bridge docker network connect my-bridge test1 # 將test1連接到自己創建的bridge網絡
docker創建自己的bridge網絡 技術分享圖片
docker pull nginx     從docker hub中下載nginx
docker run --name web -d -p 80:80 nginx      運行並將端口映射到主機的80端口
然後通過ifconfig查到ip地址就能訪問了
docker搭建nginx通過端口映射訪問
技術分享圖片
# 部署mysql
docker run -d --name mysql -v mysql-date:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql
# 部署wordpress
docker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress
docker搭建wordpress和部署

Dockerfile 語法

FROM:
    fROM scratch  # 制作base image
    FROM ubuntu   # 使用base image
    FROM ubuntu:18.04 

盡量使用官方的image作為base image

LABEL:
  LABEL maintainer="[email protected]"
  LABEL version="1.0"
  LABEL description="This is description"

Metadata不可少!

RUN:
  RUN apt-get update && apt-get install -y vim \
     python-dev # 反斜杠表示換行
  RUN apt-get update && apt-get install -y perl \
     pwgen --no-install-recommends && rm -rf \
     /var/lib/apt/lists/* # 註意清理緩存

為了美觀,復雜的RUN請用反斜杠換行!避免無用分層,合並多條命令成一行!


WORKDIR:
  WORKDIR /root
  WORKDIR /test # 如果沒有會自動創建test目錄
  WORKDIR demo
  RUN pwd # 輸出應該是 /root/test/demo

用WORKDIR,不要用RUN cd!盡量使用絕對目錄!

ADD and COPY
  ADD hello /
  ADD test.tar.gz / # 添加到根目錄並解壓
  WORKDIR /root
  ADD HELLO test/ # /root/test/hello
  COPY hello test/

大部分情況,copy優於ADD!ADD除了COPY還有額外功能(解壓!)
添加遠程文件/目錄請使用curl或者wget!


ENV:
  ENV MYSQL_VERSION 5.6 #設置常量
  RUN apt-get install -y mysql-server="${MYSQL_VERSION}" \
     && rm -rf /var/lib/apt/lists/* # 引用常量

盡量使用ENV增加可維護性

VOLUME and EXPOSE:
  後面補充

CMD and ENTRYPOINT:
  後面補充


RUN:執行命令並創建新的Image Layer
CMD:設置容器啟動後默認執行的命令和參數
ENTRYPOINT:設置容器啟動時運行的命令

CMD:容器啟動時默認執行的命令
   如果docker run指定了其他命令,CMD命令會被忽略
   如果定義了多個CMD,只有最後一個會執行

ENTRYPOINT:讓容器以應用程序或者服務的形式運行
       不會被忽略,一定會執行

三種網絡結構:
docker bridge
docker none
docker host

數據持久化-方式一
docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql     安裝並初始化mysql
docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql 指定數據存取目錄
docker volume ls 查看存在的十九畫數據庫
docker volume rm 926c67936e2e69d736b9649416c516cf38e93b4f053ee73b2dff9c1ce3148ba8 刪除數據庫
然後通過docker exec -it mysql2 /bin/bash 進入查看

數據持久化-方式二  bind mounting
docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web my-nginx 也可以使用-v 然後通過地址映射進行文件同步


docker操作小技巧:不用每次執行命令都添加sudo

sudo groupadd docker
sudo gpasswd -a felix docker    將當前用戶加入到組
sudo service docker restart    重啟docker服務
然後退出shell,重新連接,這回執行docker命令可以不用加上sudo

docker命令集錦