Docker是一个虚拟化的平台,虚拟引擎。
最本质上解决的问题:服务需要的资源打包在一起,把每个服务都放在独立的容器中运行,相互不影响。
每一个容器启动的时候都分配新的命名空间,通过命名空间来实现服务于服务之间的隔离。
镜像(Image)
Docker 镜像是一个特殊的文件系统(https://hub.docker.com/),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。例如JDK镜像、Centos镜像、MySQL镜像等,可以暂时先将其理解为一个安装程序。
容器(Container)
Docker容器可以将其理解为一个运行镜像的载体,镜像(Image)和容器(Container)的关系,就像是光盘和光驱。容器基于镜像创建、启动,然后运行镜像的中的文件。
Docker 是一种Client/Server架构的应用程序
Docker Host是我们的docker宿主机(就是安装了docker的操作系统)
Registry是docker拉取镜像的远程仓库,提供大量的镜像供下载,下载完成之后保存在Images中
Docker Daemon是docker的服务线程,处理Docker客户端命令。
Images 是Docker本地的镜像仓库,可以通过docker images查看镜像文件。
docker pull执行过程
1)客户端将指令发送给docker daemon
2)docker daemon 先检查本地images中有没有相关的镜像
3)如果本地没有相关的镜像,则向镜像服务器请求,将远程镜像下载到本地
docker run 执行过程
1)检查本地是否存在指定的镜像,不存在就从公有仓库下载
2)利用镜像创建并启动一个容器
3)分配一个文件系(简版linux系统),并在只读的镜像层外面挂载一层可读写层
4)从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
5)从地址池配置一个 ip 地址给容器
6)执行用户指定的应用程序
假如已经有docker,可通过执行如下指令卸载Docker
sudo yum remove docker-ce
docker-ce-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
- 第一步:安装yum工具
sudo yum install -y yum-utils - 第二步:设置 yum 仓库地址
sudo yum-config-manager
–add-repo
https://download.docker.com/linux/centos/docker-ce.repo - 第三步:更新 yum 缓存
sudo yum makecache fast #yum 是包管理器 - 第四步:安装新版 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
第一步:下载docker离线包
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
第二步:下载离线安装工具
https://github.com/Jrohy/docker-install/
第三步:将下载好的资源放在一个目录,例如:
在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录
第四步:执行安装操作
chmod +x install.sh 修改权限
./install.sh -f docker-20.10.6.tgz 执行安装
systemctl 是linux的指令s
systemctl start docker–启动docker
systemctl status docker–查看docker状态
systemctl enable docker–开机自启
systemctl disable docker–禁用开机自启
systemctl restart docker–重启服务
docker info --查看信息
ps -ef | grep docker --查看docker进程
由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json
解释:
cat 查看 <
{
“registry-mirrors”: [
“https://docker.mirrors.ustc.edu.cn”,
“http://hub-mirror.c.163.com”
],
“max-concurrent-downloads”: 10,
“log-driver”: “json-file”,
“log-level”: “warn”,
“log-opts”: {
“max-size”: “10m”,
“max-file”: “3”
},
“data-root”: “/var/lib/docker”
}
EOF
1、下载镜像–从远端下载镜像
docker pull 镜像名
2、浏览镜像文件–查看本地镜像
docker images
3、查看进行详细信息
docker inspect 镜像名/镜像id
3、运行镜像文件
docker run 镜像
1、docker ps -a 查看所有的容器信息
2、docker rm 容器id --需要删除容器
3、docker image rm 镜像名–再删除镜像
docker run 镜像名
如果本地没有该镜像,就会从远端服务器下载
1、docker inspect 镜像名
2、docker history 镜像名
1、docker导出
docker 的环境变量默认配置好
docker 镜像导出位置目录下执行就生成在哪个目录
docker save hello-world | gzip > helloworld.tar.gz
2、docker导入
docker load < 镜像名
docker pull centos:7
4.2 创建容器docker run -it xxxx bash
其中:
1)xxxx - 镜像名, 或 image id 的前几位,
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)
3) bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)。
案例:通过docker启动运行 centos7镜像
docker run -it centos:7 bash
docker ps 查看启动的容器
docker ps -a 查看所有的容器
docker container logs 容器名
1、容器启动
docker container start 容器名
2、容器重启
docker container restart 容器名
3、关闭容器
docker container stop 容器名
4、容器在运行过程不能删除,如果想要删除加
docker contianer rm -f 容器id
5、清除所有处于终止状态的容器
docker container prune
说明,执行完这个指令以后,可以通过docker ps -a 再查看容器,看看是否有删除.
把容器删除完了
数据卷和目录挂载的区别,两者最大的区别是是否有docker去管理。
数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容
docker volume create container-vol --在宿主机创建数据卷
docker volume inspect container-val --查看数据卷的目录结构
docker run -it -v container-val:/cgb2017 centos:7 bash–挂载数据卷容器
将文件挂在到容器后,宿主机与容器共享
创建了数据卷之后,可以通过docker volume inspect 数据卷名查看路径,挂在的容器上的文件与宿主机共享
docker run -it -v /usr/app/:/opt/app centos:7 bash --挂在目录
打包应用有依赖层次关系。
第一步:在jdk目录里面创建一个Dockerfile文件,编辑如下内容
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
添加jdk到/usr/local/docker这个目录
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51
设置环境变量
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD [‘bash’]
将环境加载到容器中
第二步:创建JDK镜像
在Dockerfile所在目录执行docker build指令.例如:
docker build -t jdk:8 . #不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写.
1、将sentinel放在宿主机的文件路径中(指定挂载点的路径)
docker run -d -p 8180:8080端口映射 –name sentinel服务名 -v /home/lianglin/pub-vol:/user/sentenal挂载点文件夹 jdk:8容器名 java -jar /user/sentenal/sentinel-dashboard-1.8.1.jar执行sentinel服务的命令
centos:7镜像
放在相同目录中
jdk-8u51-linux-x64.tar.gz
sentinel-dashboard-1.8.0.jar
1、讲sentinel的jar文件复制在宿主机的目录
2、docker build -t sentine:8 .
3、docker run -d --name sentinel8181 -p 8181:8080 sentinel:8 #-d 表示后台运行,-p用于指定端口映射,sentinel:8为镜像文件名
docker load < 镜像包
sudo docker run -p 3306:3306 --name mysql
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files
-v /usr/local/docker/mysql/conf:/etc/mysql
-v /usr/local/docker/mysql/logs:/var/log/mysql
-v /usr/local/docker/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=root
-d mysql:8.0.23
sudo docker exec -it mysql bash
设置mysql开机自启动(可选)
docker update mysql --restart=always --开机自启
在容器中导入sql,需要挂在文件夹,在挂在的文件夹执行sql
mysql> source /var/lib/mysql-file/jt-sso.sql;
安装步骤
第一步:下载镜像文件
docker pull redis
第二步:准备配置文件
创建redis配置文件目录
mkdir -p /usr/local/docker/redis01/conf
在配置文件录下创建redis.conf配置文件(这个文件一定要创建,否在我们进行目录挂载时默认生成的是一个目录)
touch /usr/local/docker/redis01/conf/redis.conf
第三步:创建redis实例并启动
sudo docker run -p 6379:6379 --name redis01
-v /usr/local/docker/redis01/data:/data
-v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf
-d redis redis-server /etc/redis/redis.conf
第四步:查看正在运行的进程
docker ps
访问redis服务器
第一步:控制台直接连接redis测试
docker exec -it redis01 bash
第二步:检测redis 版本
redis-server -v
或者
redis-cli -v
第三步:登录redis(默认不需要密码)
redis-cli
或者直接将上面的两个步骤合为一个步骤执行也可以,指令如下:
docker exec -it redis01 redis-cli
停止和启动redis服务
停止redis服务?
docker stop redis01
启动redis服务?
docker start redis01
重启 redis 服务?
docker restart redis01
以宿主机作为网关
docker network create t-net 创建网络
查看网络的信息
基于创建的网络启动容器
docker run -it --name app1 --network t-net centos:7
docker run -it --name app2 --network t-net centos:7



