>[info] 生產中一般都是通過dockerfile來創建容器和docker-compose來編排容器
[toc]
## 一般操作流程
# 啟動docker
systemctl start docker
systemctl status docker
# 先去倉庫拿到鏡像
docker search ubuntu
docker pull ubuntu
docker images
# 運行鏡像容器 -dit 沒有d就直接進入
docker run --name myubuntu -dit ubuntu /bin/bash
# 查看啟動鏡像 , -a是顯示所有 (默認是只顯示運行的)
docker ps -a
# 啟動容器
# 如果啟動不了的,在運行時docker run -dit ubuntu
docker start myubuntu
# 進入容器 (別用attach進入,因為如果再開一個窗口就會同步操作,類似于單用戶模式遠程操作)
docker exec -i -t myubuntu /bin/bash
# 查看容器信息
docker inspect ac11f587f8c7
docker inspect ac11f587f8c7 | grep IPAddress | cut -d '"' -f 4 # 獲得ip
docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' id # 獲取端口映射
docker inspect -f "{{ .State.Pid }}" ac11f587f8c7 # 獲得pid
# 導出容器 docker save -o [自定義鏡像包名稱] [鏡像]
docker save -o myubuntu2.tar ubuntu
# 停止容器
docker stop container_id
# 刪除容器 (刪除之前要先停止)
docker rm myubuntu
# 刪除鏡像
docker rmi image_id # 或者image_name
# 導入鏡像
docker load --input centos.tar
docker load < nginx.tar
## 運行一個web-應用
docker pull training/webapp
docker run -d -P training/webapp python app.py
# -P 將容器內部使用的網絡端口映射到我使用的主機的隨機端口上。返回容器id
# docker port id
# 0.0.0.0:32769->5000/tcp 5000端口映射到宿主機的32769端口上
# 也可以通過-p來指定端口,此處是將docker的5000端口映射到宿主機的8080端口
docker run -d -p 8080:5000 training/webapp python app.py
# 監聽日志
docker logs -f b611241d0f01
## 其他
# 創建并拉取busybox
docker run -it --name con01 busybox:latest
# 獲取環境變量
docker exec container_id env
# 殺掉所有正在運行的容器
docker kill $(docker ps -q)
# 刪除老的(一周前創建)容器,注意命令必須是單引號
docker ps -a | grep 'weeks ago' | awk '{print $1}' | sed '1d' | xargs docker rm
# 刪除所有的容器
docker ps -a | awk '{print $1}'| sed '1d' | xargs docker stop | xargs docker rm
# 刪除已經停止的容器
docker rm `docker ps -a -q`
# 刪除所有鏡像,小心
docker rmi $(docker images -q)
>[info] 1. 容器不是一個虛擬機,因為他就是一個進程,如果我們退出,這個進程就退出了
>2. 如果我們執行創建容器的時候,里面沒有我們指定的鏡像,那么他會從dockerhub上進行下載然后在啟動