Docker快速入门!!!

Docker

Docker是一个开源的应用容器引擎,基于Go语言。
在这里插入图片描述
参考课程:【狂神说Java】Docker最新超详细版教程通俗易懂

容器与VM

容器直接在Linux上运行,同时还与其他容器共同宿主机的kernel,容器之间相互隔离,占用的内存小于其他任何可执行应用,这使得Docker轻量化。相反VM则需要以运行一个完整的客户机操作系统,并使用hypervisor通过虚拟路径访问主机资源。
在这里插入图片描述

Docker在Centos7的安装

若存在Docker,需要先卸载Docker:

yum remove docker \
           docker-client \
           docker-client-latest \
           docker-common \
           docker-latest \
           docker-latest-logrotate \
           docker-logrotate \
           docker-engine

1.安装yum-utils,yum-utils提供yum-config-manager。

yum install -y yum-utils

2.设置yum的镜像仓库,使用aliyun镜像仓库。

yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装最新的Docker

yum install docker-ce docker-ce-cli containerd.io
#      ce社区版        client

4.启动Docker

systemctl start docker

5.测试安装

docker run hello-world

成功结果:
在这里插入图片描述
同时可以使用镜像加速:使用不同的服务器可以使用不同的镜像加速,aliyun,tencentyun等等。
centos的配置:

vim /etc/docker/daemon.json

{
    
    
"registry-mirrors": [
  "https://mirror.ccs.tencentyun.com"
]
}

然后重启服务

systemctl daemon-reload
systemctl restart docker 

其他相关命令

yum remove docker-ce docker-ce-cli containerd.io 
#卸载Docker engine
rm -rf /var/lib/docker  
# 删除镜像,容器,数据卷等,此路径为docker的工作目录

Docker工作流程

参照docker run hello-world

  1. 在本地寻找是否有对应镜像。
  2. 没有就会去仓库寻找并pull,如果厂库中没有就返回。
  3. 找到后下载安装并运行。

常用命令

docker version    #docker版本信息
docker info       #查看docker信息
docker images     #查看本地镜像
docker images -q  #只显示image ID
docker pull       #下载image,默认下载latest
docker pull xxx:tag  #下载指定版本image
docker search xxx  #寻找image
docker rmi -f xxx #删除指定image
docker rmi -f xxx xxx xxx  #删除多个image
dock rmi -f $(docker images -aq)  #删除所有image

docker run [参数] xxx /bin/bash 
#启动容器
--name="xxx" 给容器命名
-it  以交互方式启动并进入容器
-d  后台运行
-p 主机端口:容器端口
-p ip:主机端口:容器端口
-p 容器端口
-P  随机指定端口

docker exec -it xxx /bin/bash # 进入正在运行的容器,开启一个新终端
docker attach xxx # 进入正在运行的容器的终端

docker ps #显示正在运行的容器
docker ps -a #显示所有容器

docker rm xxx #删除指定容器,无法删除正在运行的,-f 强制删除
dcker rm -f $(docker ps -aq) #删除所有容器
docker start  #启动容器
docker restart  #重启
docker stop  #停止
docker kill  #强制停止
docker logs xxx  #显示日志 -f 带上时间戳
docker logs -f -t --tail n xxx  #显示logs的n行
docker top xxx  #查下容器内部进程信息

dcoker inspect xxx  #显示容器元数据

docker cp 容器id:路径 目的路径 #将文件从容器中拷贝到主机

在这里插入图片描述

Docker镜像原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
镜像采用分层的方式,每一层都是单独的文件系统,多个镜像之间可以复用同一层的文件,每次只需要下载没有的文件。
在这里插入图片描述
在这里插入图片描述
每当容器启动时,会加一层可以写层到镜像,这一层成为容器层,对镜像所有的修改都在这一层,容器层下都是镜像层。

提交镜像

docker commit [参数] 容器id 目标镜像名:[TAG]
-m="提交的描述信息"
-a="作者"

DockerFile

使用DockerFile构建镜像,必须都是大写字母,每一个指令都是一层镜像层。

FROM #基础镜像
MAINTAINER #镜像创作者 姓名+邮箱
ENV #设置环境变量
RUN #构建时所需要的命令
ADD #添加的压缩包,自动解压
WORKDIR #镜像工作目录
VOLUME ["volum01","volume02"] #设置容器卷,挂载的host目录
EXPOSE #暴露的端口
CMD  #启动时运行的命令,只会执行最后一个CMD,会覆盖

容器数据卷

容器中的数据是会跟随容器的,删除掉容器,数据也会丢失,Docker volume可以使得容器中的数据持久化到host,同时还可以让容器之间实现数据共享。

docker run -it -v /主机目录:容器目录 镜像名 #指定挂载

可以使用inspect查看:
在这里插入图片描述

具名和匿名挂载

docker run -d -v 容器目录 #只指定容器目录,使用匿名挂载,volume name为乱码
docker run -d -v volume name:容器目录 #声明volume name

在这里插入图片描述
使用inspect可以查看挂载在host的目录路径,在没有指定host目录时,都是挂载在下图这个路径中,大多数都是使用具名挂载。
在这里插入图片描述
扩展
在这里插入图片描述

数据卷容器

实现多个容器之间的数据共享(只是共享挂载出来的)。

--volumes-from 父容器

Docker网络

Docker0

使用ip addr查看docker0,docker0是只要安装了docker就会分配的网卡。
在这里插入图片描述
在容器中查看ip addr,eth0261,与host中262是对应的,这是一对虚拟设备接口,host与容器之间就是使用veth-pair实现的通信。
在这里插入图片描述
在这里插入图片描述
实现容器之间的通信使用桥接模式。
在这里插入图片描述
link (很少使用)

docker run --name tomcat03 --link tomcat02 tomcat #使用link将两个容器连接

但是使用link需要配置两个方向,不然只能单向连通,使用link会让tomcat03的host中声明tomcat02的ip。
在这里插入图片描述

自定义网络(常用)

网络模式
bridge:桥接模式 默认(常用)。
none:无网络配置。
host:与host共享网络。
container:容器网络连通,几乎不使用。

docker run xxxx --net #可以指定网络模式或者自定义的网络名称
#使用默认模式,不能通过域名连通,在使用link后才可以
docker network create --driver bridge --subnet 192.168.0.0/16
--gateway 192.168.0.1 网络名称
docker network ls #查看docker网络

猜你喜欢

转载自blog.csdn.net/TheCarol/article/details/112662775