docker 安裝與常用命令
一、安裝與啓動
硬件環境:4C8G 物理機
系統環境:
[root@dev216 ~]# uname -r
3.10.0-957.el7.x86_64
[root@dev215 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
直接安裝
[root@dev216 ~]# yum install docker
可能出現的問題:
問題一,yum 中的 python 與系統中的不匹配
-bash: /usr/bin/yum: /usr/bin/python2.7.5: bad interpreter: No such file or directory
這是因爲有人動了環境裏的 python,查看 python
[root@dev216 ~]# whereis python
python: /usr/bin/python /usr/bin/python2.7 /usr/bin/python.bak /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz
修改 yum 中的 python 引用(或者直接備份 python,將 python2.7 改爲 python)
[root@dev216 ~]# vim /usr/bin/yum
將
#!/usr/bin/python
改爲
#!/usr/bin/python2.7
問題二,還是 python 引用的問題
[root@dev216 ~]# yum install docker
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
* base: mirrors.huaweicloud.com
* extras: mirrors.bfsu.edu.cn
* updates: mirrors.bfsu.edu.cn
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
File "/usr/libexec/urlgrabber-ext-down", line 28
except OSError, e:
^
SyntaxError: invalid syntax
File "/usr/libexec/urlgrabber-ext-down", line 28
except OSError, e:
^
SyntaxError: invalid syntax
Exiting on user cancel
修改 / usr/libexec/urlgrabber-ext-down
vim /usr/libexec/urlgrabber-ext-down
將
#!/usr/bin/python
改爲
#!/usr/bin/python2.7
啓動 docker
systemctl start docker.service
二、docker 操作
啓動與狀態(centos7)
#啓動、停止、重啓
systemctl start/stop/restart docker
# 查看docker的運行狀態,active(運行)inactive(死亡)
[root@dev216 ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Thu 2021-07-08 16:27:31 CST; 1min 29s ago
Docs: http://docs.docker.com
Main PID: 27805 (dockerd-current)
Tasks: 25
CGroup: /system.slice/docker.service
├─27805 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default...
└─27813 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --...
Jul 08 16:27:30 dev216 dockerd-current[27805]: time="2021-07-08T16:27:30.088468818+08:00" level=info msg="libconta...7813"
Jul 08 16:27:31 dev216 dockerd-current[27805]: time="2021-07-08T16:27:31.157415965+08:00" level=info msg="Graph mi...onds"
Jul 08 16:27:31 dev216 dockerd-current[27805]: time="2021-07-08T16:27:31.158454396+08:00" level=info msg="Loading ...art."
Jul 08 16:27:31 dev216 dockerd-current[27805]: time="2021-07-08T16:27:31.166785370+08:00" level=info msg="Firewall...alse"
Jul 08 16:27:31 dev216 dockerd-current[27805]: time="2021-07-08T16:27:31.246307425+08:00" level=info msg="Default ...ress"
Jul 08 16:27:31 dev216 dockerd-current[27805]: time="2021-07-08T16:27:31.275860687+08:00" level=info msg="Loading ...one."
Jul 08 16:27:31 dev216 dockerd-current[27805]: time="2021-07-08T16:27:31.293321663+08:00" level=info msg="Daemon h...tion"
Jul 08 16:27:31 dev216 dockerd-current[27805]: time="2021-07-08T16:27:31.293354473+08:00" level=info msg="Docker d....13.1
Jul 08 16:27:31 dev216 dockerd-current[27805]: time="2021-07-08T16:27:31.298513884+08:00" level=info msg="API list...sock"
Jul 08 16:27:31 dev216 systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
docker 信息
# 查看docker容器help,可以快速瞭解有哪些命令
docker --help
# 查看docker容器版本,包含客戶端、服務端的版本信息
docker version
# 查看docker容器信息,包含version和操作系統,硬件配置等
docker info
docker debug
# 設置日誌級別,默認info級別,包含"debug", "info", "warn", "error", "fatal"
docker --log-level info
三、鏡像操作
鏡像遠程操作
# 登錄賬戶
docker login
# 鏡像搜索 ,可選參數:
# --filter 或 -f 過濾條件 -f=stars=50只顯示starts>50的鏡像
# --no-trunc 顯示鏡像的完整描述
# --limit int 一頁顯示幾條,默認25條
# --automated 過濾automated=ok的,提示已過期,讓用filter,使用卻不行
docker search [-f=stars=50 --no-trunc] mysql
# 鏡像拉取,-a 可選,表示全tag拉取,latest表示要拉取的鏡像tag
docker pull [-a] mysql:latest
# 將鏡像推送到遠程倉庫,將tag爲yxkong的mysql鏡像推送到遠程倉庫
docker push mysql:yxkong
示例
[root@dev216 ~]# docker search -f=stars=50 --automated python
Flag --automated has been deprecated, use --filter=automated=true instead
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/kaggle/python Docker image for Python scripts run on Kaggle 155 [OK]
docker.io docker.io/nikolaik/python-nodejs Python with Node.js 77 [OK]
docker.io docker.io/joyzoursky/python-chromedriver Python with Chromedriver, for running auto... 58 [OK]
鏡像本地操作
# 列出本地images,-a(顯示所有) -f(過濾) -q(只顯示鏡像id)
# 不加mysql顯示所有,加mysql只顯示mysql的
docker images mysql
# 顯示指定鏡像的提交記錄, -H 默認爲true;-q(只顯示鏡像id)
docker history mysql
# 刪除本地鏡像 -f 強制刪除,後面可以刪除一個或多個
docker rmi redis mysql
# 刪除本地全部鏡像
docker rmi -f $(docker images -q)
# 鏡像打包成tar,將redis 4.2tag的鏡像打包成redis4.2.tar
dcoker save -o redis4.2.tar redis:4.2
# 從tar包載入鏡像
docker load -i redis4.2.tar
# 給某個鏡像打tag
docker tag
# 構建鏡像 指定dockerfile構建指定tag的鏡像
docker build -f /docker/dockerfile/yxk_mysql -t yxk_mysql:yxkong
四、容器操作
容器啓動
# 包含兩步,將鏡像放入容器,再啓動容器
docker run -it --name yxk_redis redis
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
options
-i 以交交互的模式運行容器 通常和-t一起使用
-t 爲容器分配一個終端,通常和-i一起使用
-d 後臺運行容器(類似於nohup)並返回一個容器id
-a 指定標準輸入輸出內容類型STDIN/STDOUT/STDERR,默認[]
-p 指定端口映射,格式爲 主機:主機端口:容器端口
--name 爲容器指定一個名稱
--dns 指定容器使用的dns,默認和宿主一樣
-h 指定容器的hostname
--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;
-e 設置環境變量
--env-file=[]: 從指定文件讀入環境變量;
-m 設置容器的最大內存
--expose=[]: 開放一個端口或一組端口;
--volume , -v: 綁定一個卷
# 只是啓動容器或重啓容器
docker start/restart yxk_redis
容器查看
##top支持 ps 命令參數,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
##列出yxk_redis容器中運行進程,不加容器名就所有
docker top yxk_redis
##查看所有運行容器的進程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
##查看redis容器日誌,默認參數
docker logs yxk_redis
##查看redis容器日誌,參數:-f 跟蹤日誌輸出;-t 顯示時間戳;--tail 僅列出最新N條容器日誌;
docker logs -f -t --tail=20 yxk_redis
##查看容器redis從2021年07月08日後的最新10條日誌。
docker logs --since="2021-07-08" --tail=10 yxk_redis
# 查看當前運行的容器,
# 參數:-a 查看全部容器(包含正在運行和歷史運行過的)
# -q 查看正在運行容器的id -s 查看運行容器總文件大小
# -l 顯示最近創建容器 -n 3 顯示最近創建的3個容器 --no-trunc 不中斷輸出
docker ps -qs yxk_redis
# 獲取鏡像yxk_redis的元信息
docker inspect yxk_redis
# 獲取正在運行的容器yxk_redis的 IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' yxk_redis
容器的進出
# 使用run方式在創建時進入
docker run -it centos /bin/bash
# 關閉容器並退出
exit
# 僅退出容器,不關閉
快捷鍵:Ctrl + P + Q
# 直接進入centos 容器啓動命令的終端,不會啓動新進程,多個attach連接共享容器屏幕,參數:--sig-proxy=false 確保CTRL-D或CTRL-C不會關閉容器
docker attach --sig-proxy=false centos
# 在 centos 容器中打開新的交互模式終端,可以啓動新進程,參數:-i 即使沒有附加也保持STDIN 打開;-t 分配一個僞終端
docker exec -i -t centos /bin/bash
# 以交互模式在容器中執行命令,結果返回到當前終端屏幕
docker exec -i -t centos ls -l /tmp
# 以分離模式在容器中執行命令,程序後臺運行,結果不會反饋到當前終端
docker exec -d centos touch cache.txt
**容器的操作與刪除
**
# 停止一個運行中的容器
docker stop yxk_redis
# 殺掉一個運行中的容器
docker kill yxk_redis
# 刪除一個已停止的容器
docker rm yxk_redis
# 刪除一個運行中的容器
docker rm -f yxk_redis
# 刪除多個容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
# -l 移除容器間的網絡連接,連接名爲 db
docker rm -l db
# -v 刪除容器,並刪除容器掛載的數據卷
docker rm -v yxk_redis
容器與主機間的數據交互
# 將yxk_redis容器中的文件copy至本地路徑
docker cp yxk_redis:/[container_path] [local_path]
# 將主機文件copy至yxk_redis容器
docker cp [local_path] rabbitmq:/[container_path]/
# 將主機文件copy至yxk_redis容器,目錄重命名爲[container_path](注意與非重命名copy的區別)
docker cp [local_path] yxk_redis:/[container_path]
所有的 docker 命令都可以通過以下方式獲取詳細說明
docker 命令 --help 會有各種參數d的詳細shuo'm
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/NDNDp55o1LSn84blH0sxzw