Docker是一种独特的虚拟化技术,与其他虚拟化产品不同的是Docker本身占用资源特别少。像VMware,KVM等产品要开启一台虚拟机就是完全的从系统内核起了一台与宿主机差不多同样的系统。
注册中心:超级码头,上面就是集装箱
镜像:集装箱
容器:运行起来的镜像
一、Docker的基本操作
1.1 安装docker
# 1.下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2
# 2.设置一下下载Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3.安装Docker
yum makacache fast
yum -y install docker-ce
# 4.启动,并设置为开机自动启动
mkdir -pv /etc/docker
vim /etc/docker/daemon.json
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com","quay.io"],
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
"bip": "172.7.6.1/24", >>>根据自己系统的ip可以自定义后两位
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}
systemctl start docker //启动Docker服务
systemctl enable docker //设置Docker开机自启
docker run hello-world //测试,拉取镜像并运行为容器
1.2 DOCKER的中央仓库
1.Docker官方的中央仓库:这个仓库是镜像最全的,但是下载速度慢,原因是国外服务器。
https://hub.docker.com/
2.国内的镜像网站:网易蜂巢,DaoCloud……
https://c.163yun.com/hub#/home
http://hub.daocloud.io/ (推荐使用)
3.在公司会采用私服务的方式拉取镜像。(添加配置)
https://c.163yun.com/hub#/home
# 需要在/etc/docker/daemon.json
{
"registry-mirrors": ["https;//registry.docker-cn.com"],
"insecure-registries": ["ip:port"]
}
# 重启两个服务
systemctl restart daemon-reload
systemctl restart docker
1.3 镜像操作
# 1.拉取镜像到本地,标签可写可不写
docke pull 镜像名[:tag]
# 举个例子
docker pull daocloud.io/library/tomcat:8.5.15-jre8
# 2.查看本地全部镜像
docker images
# 3.删除本地镜像
docker rmi 镜像名称|ID
docker rmi -f 镜像名称|ID //删除正在运行的容器的镜像
# 4.镜像的导入导出
docker save -o nginx.tar nginx:latest //导出镜像
或
docker save > nginx.tar nginx:latest
docker load -i nginx.tar //导入镜像
或
docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
# 5.修改镜像名称
docker tag 镜像名|ID 新镜像名称:版本
1.4 容器操作
# 1.运行容器
docker run 镜像名称|ID[:tag] //简单操作命令
docker run -d -p 宿主机端口:容器内端口 --name 容器名称 镜像名称|ID[:tag] //常用操作命令
# -d:代表后台运行容器
# -p:为了映射当前宿主机系统内的端口到容器中
# --name:指定要运行容器的名称
# 2.查看容器运行状态
docker ps //查看正在运行的容器
docker ps -a //查看全部运行过的容器
# 3.查看容器的日志
docker logs -f 容器名称|ID
# -f:可以滚动查看日志的最后几行
# 4.进入到容器内部
docker exec -it 容器名称|ID /bin/bash
# 5.停止删除容器
docker stop 容器名称|ID //停止指定容器
docker stop $(docker -qa) //停止全部容器
docker rm 容器名称|ID //删除指定容器
docker rm $(docker -qa) //删除全部容器
# -f:强制删除(运行中容器)
# 6.启动容器
docker start 容器名称|ID
1.5 其他操作
# 1.拷贝命令
docker cp 宿主机文件目录:容器目录
# 例如:把宿主机/home下的文件拷贝到容器的/目录下
docker cp /home/文件 容器名:/
# 2.打包容器为镜像
docker commit -p 容器名 要打包的镜像名
# 3.查看容器或者镜像的详细信息
docker 容器名称|ID inspect
docker 镜像名称|ID inspect
1.获取镜像
docker pull NAME[:TAG]
如果没有显示TAG,则默认是latest标签,也就是最新版本的镜像
2.查看镜像信息:
容器数据卷
什么是容器数据卷
将应用和环境打包成一个镜像!数据?如果数据都在容器中,那么容器如果删除,数据就会丢失,因此有一个新的需求:数据持久化
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们的容器内的目录,挂载到linux上面!
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!
使用数据卷
方式一 直接使用命令来挂载 —v
docker run -it -v 主机目录,容器目录
docker run -it -v /home/ceshi:/home Centos /bin/bash
# 启动起来时候我们可以通过docker inspect 容器id
再来测试!
- 停止容器
- 宿主机上修改文件
- 启动容器
- 容器内的数据依旧是同步的
好处:我们以后修改只需要在本地修改即可,容器内会自动同步!
具名和匿名挂载
# 匿名挂载
-v 容器内路径
# docker run -d -P --nginx01 -v /ect/nginx nginx
# 查看所有的volume的情况
# docker volume ls
#local 0d1439b1ae68f7ad7226d1b2457559630ba93ba083292ff5f6b191b79dd2befc
# 这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径
# 具名挂载
# docker run -d -P --name ncinx02 -v juming-nginx:/etc/nginx nginx
local juming-nginx
# 通过 -v 匿名:容器路径
# 查看卷的路径
# docker volume inspect juming-nginx
所有的docker容器内的卷,没有指定目录的情况下都是在:/var/lib/docker/
# 如何确定是具名挂载还是匿名挂载,还是指定路径挂载:
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径:/容器内路径 # 指定路径挂载
拓展:
ro readonly # 只读
re readwrite # 只写
# 一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定了!
docker run -d -P --name nginx02 -v juming -nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming -nginx:/etc/nginx:rw nginx
初识Dockerfile
Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!
# 创建一个dockerfile文件,名字可以随机,建议dockerfile
# 文件中的内容
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "----end----"
CMD /bin/bash
# 这里的每一个命令,就是镜像的一层。
用Pycharm远程访问docker容器
docker run -itd -p 5000:8000 -p 8022:22 --name Darknet -v /home/zg/Code:/home 03fd2203a0be bash
docker run -p 8022:22 -v /home/zg/Mycode:/home --name="tensorflow" -itd nvcr.io/nvidia/cuda:11.2.0-cudnn8-devel-ubuntu18.04 /bin/bash
从容器创建一个镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
- -a :提交的镜像作者;
- -c :使用Dockerfile指令来创建镜像;
- -m :提交时的说明文字;
- -p :在commit时,将容器暂停
docker commit c4f560325824 data_amplification:v1
docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
打包一个镜像
docker save [OPTIONS] IMAGE [IMAGE...]
docker save -o data_change.tar data_amplification:v1
新服务器载入镜像
docker load [OPTIONS]
例:
docker load --input data_change.tar