本文爲做者原創,轉載請註明出處:https://www.cnblogs.com/leisure_chn/p/14349287.htmlhtml
本文用到的符號說明:nginx
<container> 容器名,形如 tiangolo/nginx-rtmp 或 nginx 等 <img> 鏡像名,形如 ubuntu:16.04 或 ubuntu 等 <container_id> 容器 id,形如 8648e373168c <img_id> 鏡像 id,形如 52b18ed2d4bf <tag> 鏡像標籤,形如 0.2, 0.3
查看當前處於運行狀態的容器:docker
docker ps
查看全部容器:json
docker ps -a
docker start <container> docker stop <container> docker start ffmpeg-centos-0.2 docker stop ffmpeg-centos-0.2
語法:ubuntu
docker run [OPTIONS] <img> [COMMAND] [ARG...] -a stdin: 指定標準輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項; -d: 後臺運行容器,並返回容器ID; -i: 以交互模式運行容器,一般與 -t 同時使用; -p: 端口映射,格式爲:主機(宿主)端口:容器端口 -t: 爲容器從新分配一個僞輸入終端,一般與 -i 同時使用; -h: 容器裏的主機名(hostname) --name="<container>": 爲容器指定一個名稱;
實例:centos
基於鏡像建立容器,容器在前臺運行,在容器中執行 exit 後容器將變爲中止狀態:bash
docker run -it --name <container> <img> bash docker run -it --name <container> <img>:<tag> bash docker run -it --name ffmpeg-centos-0.2 ffmpeg-centos:0.2 bash
基於鏡像建立容器,容器在後臺運行,在容器中執行 exit 後容器仍處於運行狀態:網絡
docker run -itd --name ffmpeg-centos-0.2 ffmpeg-centos:0.2 bash
基於鏡像建立容器,容器在前臺運行,將宿主機上 /home/think/work 目錄映射爲容器中的 /work 目錄:ui
docker run -it -v /home/frank/work:/work --name ffmpeg-centos-0.2 ffmpeg-centos:0.2 bash
基於鏡像建立容器,容器在前臺運行,將宿主機上 60084 端口映射爲容器中的 80 端口:操作系統
docker run -it -p 60084:80 --name ffmpeg-centos-0.2 ffmpeg-centos:0.2 bash
語法:
docker exec [OPTIONS] <container> COMMAND [ARG...] -d: 分離模式: 在後臺運行 -i: 即便沒有附加也保持 STDIN 打開 -t: 分配一個僞終端
實例:
進入容器並打開容器中的 bash:
docker exec -it <container> bash docker exec -it ffmpeg-centos-0.2 bash
進入容器後,在容器中執行 exit 將退出容器進入主機環境,但容器並不會中止。
若是加 -d 參數,沒法進入容器中操做 bash,此命令執行完,仍在宿主機 bash 中。
docker exec -itd <container> bash
因此 -d 參數目前看來沒什麼用,待研究。
查看容器信息,諸如 IP、映射目錄等
docker inspect <container> docker inspect ffmpeg-centos-0.2
docker rename <container1> <container2> docker rename ffmpeg-centos-debug ffmpeg-centos-0.2
刪除處於中止狀態的容器
docker rm <container> docker rm ffmpeg-centos-0.2
docker images
從 docker 的網絡鏡像倉庫拉取鏡像到本地:
docker pull <img> docker pull <img>:<tag> docker pull centos:7.2.1511
docker rmi <img> docker rmi ffmpeg-centos:0.2
docker tag <img_id> <img>:<tag> docker tag 8648e373168c ffmpeg-centos:0.2
docker commit -m "comment" -a "author" <container> <img>:<tab> docker commit -m "comment" -a "author" <container_id> <img>:<tab> docker commit -m "2nd version" -a "frank" ffmpeg-centos-0.2 ffmpeg-centos:0.2
docker save <img>:<tag> | gzip > <xxx>.tar.gz docker save ffmpeg-centos:0.2 | gzip > docker-img-ffmpeg-centos-0.2.tar.gz
gunzip -c <xxx>.tar.gz | docker load gunzip -c docker-img-ffmpeg-centos-0.2.tar.gz | docker load
輸入如下命令,將當前用戶添加到 docker 組,便可免 sudo 使用 docker:
sudo gpasswd -a ${USER} docker
注意:上述命令行中的 ${USER} 將獲取到當前用戶名,當前用戶是 frank,就是將 frank 添加到 docker 組,當前用戶是 root,就是將 root 用戶添加到 docker 組。固然也可手動指定用戶名將其添加其到 docker 組,如當前用戶是 root,運行 gpasswd -a frank docker
便可。
docker鏡像源位於美國,拉取鏡像很是緩慢。可配置國內鏡像源,加快鏡像拉取速度。
修改 /etc/docker/daemon.json 文件並添加上 registry-mirrors 鍵值:
{ "registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://mirror.ccs.tencentyun.com" ] }
上述配置文件添加了四個國內鏡像源:docker 中國、清華、163 和騰訊。
修改上述配置文件後重啓docker服務:
systemctl restart docker
默認狀況下,使用 docker run --privileged=true
命令以特權方式建立的容器,容器裏的用戶名是 root,具備完整的 root 權限;使用 docker run
命令以非特權方式建立的容器,容器裏的用戶名也是 root,但此 root 用戶實際至關於主機上執行 docker run
命令的用戶(例如普通用戶 frank),容器中名爲 root 的用戶並不具有 root 權限,可是容器中新建立的文件屬主卻爲 root,這樣主機中的非 root 用戶訪問這些文件時經常權限不足,形成不便。
爲解決此問題,須要將主機上的當前普通用戶映射進容器中,且使容器中的普通用戶一樣具備執行 sudo 的權限,建立容器的命令以下:
docker run --user $(id -u ${USER}):$(id -g ${USER}) \ -v /etc/sudoers.centos8.2:/etc/sudoers:ro \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/group:/etc/group:ro \ -v /etc/shadow:/etc/shadow:ro \ -v ${HOME}:${HOME} -w ${HOME} \ -it --name=ffmpeg-centos8.2-0.2-frank -h DK-FFMPEG-02-FRANK ffmpeg-centos8.2:0.2 bash
不一樣操做系統 sudoers 文件內容會有差異,例如主機系統爲 openSUSE Leap 15.2,容器系統爲 CentOS 8.2,那麼是不能將主機系統中的 sudoers 文件映射進容器裏的,起碼會有警告,因此從 CentOS 8.2 系統裏拷貝默認的 sudoers 文件放到主機中,重命名爲 /etc/sudoers.centos8.2,此文件映射進 ffmpeg-centos8.2-0.2-frank 容器,即用此文件來設置此容器中用戶的 sudo 權限。
docker system prune
待補充
利用 BuildKit 組件使用 docker 多階段構建特性,要求 docker 版本不低於 v18.06
DOCKER_BUILDKIT=1 docker build --no-cache -f dockerfiles/dockerfile-ffmpeg-centos-multi -t ffmpeg:0.4 .
待補充
2020-07-09 初稿 2020-11-05 增長 4.1 節