@【toc】目录
一、Docker技术简介:
1.概述:
2.核心对象
二、Docker安装(离线)
三、Docker服务基本操作
四、Docker镜像操作实践
五、Docker容器操作实践
六、Docker数据管理实践
1.概述
2.数据卷
3.挂载主机目录
七、Dockerfile 及镜像制作实践
1.准备工作
2.Dockerfile文件
八、Docker镜像安装实践
1.安装、登陆Mysql数据库
2.安装Redis数据库
3.安装Ngnix代理
4.安装Nacos组件
九、Docker容器互联实践
1.概述
2.新建网络
#一、Docker技术简介:
#1.概述:
Docker是一个虚拟化平台( 官网https://www.docker.com/),基于 Google 公司的 Go 语言进行实现。可以通过虚拟化方式,为应用提供可运行的容器。基于这种方式,可更快地打包、测试以及部署应用程序。
#2.核心对象
镜像(Image):Docker 镜像是一个特殊的文件系统(https://hub.docker.com/),除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。例如JDK镜像、Centos镜像、MySQL镜像等,可以暂时先将其理解为一个安装程序。
容器(Container):Docker容器可以将其理解为一个运行镜像的载体,镜像和容器的关系,就像是光盘和光驱。容器基于镜像创建、启动,然后运行镜像的中的文件。
#二、Docker安装(离线)
第一步:下载dockers离线包
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
第二步:下载离线安装工具
https://github.com/Jrohy/docker-install/
第三步:在linux环境下,创建/root/setup/docker目录,将安装工具解压放入目录
第四步:执行安装操作
进入文件夹: cd /root/setup/docker
为install.sh添加执行权限: chmod +x install.sh
安装: ./install.sh -f docker-20.10.6.tgz
第五步:安装成功后检查安装状态
docker info
#三、Docker服务基本操作
启动docker服务: systemctl start docker
查看Docker状态: systemctl status docker
设置Docker开机自启: systemctl enable docker
禁用Docker开机自启: systemctl disable docker
重新启动Docker服务: systemctl restart docker
查看Docker信息: docker info
查看docker info 中具体key的信息: docker info | grep 'Docker Root Dir:'
停止Docker服务: systemctl stop docker
Docker镜像加速:修改配置文件 /etc/docker/daemon.json ,设置好后需要重启docker服务
cat <<EOF > /etc/docker/daemon.json
{
"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
#四、Docker镜像操作实践
下载镜像: docker pull hello-world (hello-world为镜像名,以它为例)
浏览镜像文件: docker images
查看镜像详情: docker inspect hello-world
查看镜像历史: docker history hello-world
导出镜像文件(从linux下载到本地): docker save hello-world | gzip > hello-world.tar.gz
删除镜像文件: docker image rm hello-world
导入镜像操作: docker load < hello-world.tar.gz
运行镜像文件: docker run hello-world
#五、Docker容器操作实践
下载镜像: docker pull centos:7 (以CentOS镜像为例)
查看景象文件: docker images
创建并启动容器: docker run -it centos:7 bash
查看docker运行中的容器:docker ps
查看docker运行中的所有容器:docker ps -a
查看容器日志信息: docker container logs 802 (802为容器id前三位)
停止运行的容器: docker container stop 802
重新启动容器: docker container restart 802
进入指定容器: docker exec -it 802 bash
退出容器: exit
删除容器: docker container rm 802 (如果删除运行中的容器需要添加-f参数)
清理所有终止状态容器: docker container prune
#六、Docker数据管理实践
#1.概述
在容器中管理数据主要有两种方式:
1)挂载主机目录 (Bind mounts)-最常用 (docker run -v 宿主机目录:容器目录)
2)数据卷(Volumes)
#2.数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。
创建数据卷: docker volume create container-vol
查看所有数据卷: docker volume ls
查看指定数据卷的信息: docker volume inspect container-vol
启动挂载数据卷的容器: docker run -it -v container-vol:/root centos:7 bash
(注:-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录)
删除数据卷: docker volume rm container-vol (数据卷被使用时无法删除)
清理无主数据卷:docker volume prune
#3.挂载主机目录
在启动容器时,目录直接挂载:docker run -it -v /usr/app:/opt/app centos:7 bash
注:1) /usr/app:为宿主机目录
2)/opt/app: 为启动容器的一个目录
3)-v 用于指定挂载目录,如果宿主机目录不存在, Docker 会自动为你按照挂载目录进行创建
查看挂载目录信息: docker inspect 91a (91a为容器id)
#七、Dockerfile 及镜像制作实践
#1.准备工作
1)centos:7镜像 (所有的镜像文件创建时都需要有一个空的centos镜像)
2)jdk压缩包 jdk-8u51-linux-x64.tar.gz,基于此压缩包,制作jdk镜像
#2.Dockerfile文件
1)文件与资源在一个目录下,通过vim打开文件,将以下指令复制进去
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /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']
2)使用Dockerfile构建镜像: docker build -t jdk:8 .
注:末尾的点,表示构建过程中从当前目录寻找文件,jdk:8为我们创建的镜像名。1)
3)运行镜像文件: docker run -it jdk:8 bash
4)查看环境变量: echo ¥PATH
查看JDK版本信息: java -version
#八、Docker镜像安装实践
#1.安装、登陆Mysql数据库
网上拉取mysql: docker pull mysql:8.0.23
(注:本地导入: docker load < mysql:8.0.23)
检查mysql镜像: docker images
启动运行mysql镜像(docker run是用于启动一个容器的,而不是镜像)
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
进入容器:docker exec -it mysql bash
登陆: mysql -uroot -proot
停止mysql服务: docker stop mysql
启动mysql服务: docker start mysql
设置mysql开机自启: docker update mysql --restart=always
#2.安装Redis数据库
下载镜像文件: docker pull 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测试: docker exec -it redis01 redis-cli
检测redis版本: redis-server -v 或者 redis-cli -v
停止redis服务: docker stop redis01
启动redis服务: docker start redis01
重启redis服务: docker restart redis01
#3.安装Ngnix代理
拉取ngnix镜像: docker pull nginx
查看images镜像: docker images
创建数据卷: docker volume create nginx-vol
查看数据卷对应的宿主机目录: docker inspect nginx-vol
启动nginx服务: docker run --name nginx -p 80:80 -v nginx-vol:/etc/nginx -d nginx
(注:其中:/etc/nginx 为nginx容器启动时,nginx镜像文件默认的解压目录)
停止nginx服务: docker stop nginx
启动nginx服务: docker start nginx
重启nginx服务: docker restart nginx
#4.安装Nacos组件
拉取nacos: docker pull nacos/nacos-server:1.4.1
mysql中执行nacos的sql脚本:
1)将此文件nacos-mysql.sql拷贝到mysql容器的宿主机对应的挂载目录(可通过docker inspect mysql查看你mysql的挂载目录)
2)在linux环境下启动并登录mysql
进入mysql容器(前提是mysql已启动): docker exec -it mysql bash
登陆mysql: mysql -uroot -p
通过source指令运行容器目录下的sql文件: source /容器目录/nacos-mysql.sql
创建并启动nacos容器:
docker run \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.227.131(需要修改本机ip) \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=jason (需要修改)\
-e MYSQL_SERVICE_PASSWORD=jason (需要修改)\
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1
开机自启容器(需要设置docker为开机自启): --restart=always
检查nacos服务: docker ps
检查启动日志: docker container logs nacos
(注:nacos的启动日志在/home/nacos/logs/start.out文件中)
停止nacos服务: docker stop nacos
启动nacos服务: docker start nacos
重启nacos服务: docker restart nacos
#九、Docker容器互联实践
#1.概述
Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql
Docker 中容器与容器之间进行通讯的解决方案一般有两种:
第一种:两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
第二种:两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。
#2.新建网络
1)创建名字为t-net的网络: docker network create -d bridge t-net
2)列出所有网络: docker network ls
3)查看网络信息: docker inspect 67d (67d为创建的网络id)
4)创建容器(基于centos:7这个镜像启动容器,并加入到t-net这个网络):
docker run -it --name app1 --network t-net centos:7
新开终端执行,基于centos:7这个镜像再启动容器,同时也加入到t-net网络:
docker run -it --name app2 --network t-net centos:7
5)测试网络互通: ping app1 / ping app2
————————————————
版权声明:本文为CSDN博主「大小不少年」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhangzhanpu/article/details/120099163