一 安裝
# centos7 安裝docker
1 安裝依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2 設(shè)置yum源為阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3 安裝
sudo yum install docker-ce -y
4 docker 版本:裝的最新版
docker -v
Docker version 19.03.8, build afacb8b
docker -v查看版本,如果是17年之前的,就是老版本,操作習(xí)慣不一樣
5 啟動docker服務(wù)端:
systemctl start docker 啟動
systemctl stop docker 停止
systemctl restart docker 重啟
二 鏡像相關(guān)
# 鏡像當(dāng)成是一個沒有啟動的操作系統(tǒng)
# redis鏡像,mysql鏡像,nginx鏡像,django鏡像,python鏡像:linux+xx軟件----》鏡像跑起來--》容器:操作系統(tǒng)上運行著redis服務(wù)
# 查找鏡像:https://hub.docker.com/
docker search helloworld
docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5956 [OK] 是否是自動構(gòu)建
# 獲取鏡像:
docker pull centos # 拉取最新的:相當(dāng)于docker pull centos:latest
docker pull centos:centos7 # 拉取一個centos7
docker pull centos:centos6.7
docker pull centos:centos10 # 這個 沒有,就報錯
# 查看本地鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 3 months ago 237MB
centos centos7 5e35e350aded 5 months ago 203MB
# 刪除本地鏡像
docker rmi 470671670cac # 通過id號刪除
docker rmi centos:centos7 # 通過名字刪除
# docker rmi `docker images -q`
相當(dāng)于
docker rim 470671670cac 5e35e350aded
三 容器操作
docker ps # 查看正在運行的容器#########
docker ps –a # 查看所有容器(暫停的,停止,正在運行的。。。)
docker ps –l # 查看最后一次運行的容器
docker ps -f status=exited # 查看停止的容器
# 重點:通過鏡像創(chuàng)建并運行容器(兩步并做一步)
創(chuàng)建容器命令:docker run
-i:表示運行容器
-t:表示容器啟動后會進入其命令行。加入這兩個參數(shù)后,容器創(chuàng)建就能登錄進去。即分配一個偽終端。
--name :為創(chuàng)建的容器命名。容器名字不能重
-v:表示目錄映射關(guān)系(前者是宿主機目錄,后者是容器的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然后共享到容器上。
-d:在run后面加上-d參數(shù),則會創(chuàng)建一個守護式容器在后臺運行(這樣創(chuàng)建容器后不會自動登錄容器,如果只加-i -t兩個參數(shù),創(chuàng)建后就會自動進去容器)。
-p:表示端口映射,前者是宿主機端口,后者是容器內(nèi)的映射端口??梢允褂枚鄠€-p做多個端口映射
# -v:數(shù)據(jù)卷,做目錄映射
# -p 網(wǎng)絡(luò),做端口映射
# 演示
#基于哪個鏡像跑容器:centos:centos7 如果寫成centos表示跑最新的
#如果沒有這個鏡像呢?去遠(yuǎn)程拉,拉下來再跑
# 容器要運行,需要有一個前臺進程
docker run -it --name=mycentos7 centos:centos7 /bin/bash
# 以守護進程形式跑
docker run -di --name=mycentos2_2 centos:centos7
# 進入到容器內(nèi)部操作容器
1 exec(用的最多):在docker中執(zhí)行命令
docker exec -it mycentos2_2 /bin/bash
exit 退出
# 容器的啟動與停止
docker stop 容器id/名字
docker start 容器id/名字
docker restart 容器id/名字
# 文件拷貝
# 從宿主機copy到容器內(nèi)部
docker cp untitled3.tar mycentos2_2:/home
# 從容器內(nèi)部copy出來
docker cp mycentos2_2:/home/untitled3.tar ./
# 數(shù)據(jù)卷(目錄映射)
docker run -di --name=mycentos2_3 -v /root/test:/home centos:centos7
# 以后操作宿主機目錄和操作容器目錄會相互影響
# 查看容器信息
docker inspect 容器名字/容器id
# 查看ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id/名字
# 刪除容器
# 停止才能刪
docker rm 容器名字/id
# 刪除鏡像,如果有容器,能刪除嗎?支持,但是不推薦做
# 總結(jié):
docker run -di/-it --name=名字 -v 目錄映射,可以有多個 images:tag
docker exec -it 名字 /bin/bash
docker cp
docker stop/start/restart 容器名字
docker rm 容器名字
docker inspect 容器名字
# mysql服務(wù) 在docker中運行 -e表示環(huán)境變量,root密碼
docker run -id --name=mysql1 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# redis服務(wù) 在docker中運行
docker run -id --name=myredis -p 6379:6379 redis
# docker中部署django項目 nginx + django +uwsgi
四 遷移備份
把容器打包成鏡像
docker run -di --name=mydjango python:3.6
# 安裝django環(huán)境
pip install django==1.11.9
apt-get update
apt-get install vim
# 把容器打包成鏡像
docker commit 容器名字 鏡像名字
docker commit mydjango mydjango_i
# 基于鏡像再跑起容器
docker run -di --name=mydjango2 mydjango_i
# 把本地的鏡像拷貝到其他機器上去,在跑起容器來
# 打成一個tar包,壓縮一下(在當(dāng)前目有個mydjango.tar)
docker save -o mydjango.tar mydjango_i
# copy這個壓縮包到任意的機器上(裝了docker)
根據(jù)壓縮包,恢復(fù)成鏡像
docker load -i mydjango.tar