- Docker安装
- 进入/root/setup/docker 文件夹
- 为 install.sh添加执行权限
- 安装
- Docker常用指令
- 进入指定容器
- 退出
- 命令格式
- 示例
- 命令格式
- 示例
- 命令格式
- 示例
- Docker镜像安装
- 启动服务
- 停止服务
- 设置开机自启
- 创建redis配置文件目录
- 在配置文件录下创建redis.conf配置文件
- 检查版本
- 或
- 登录redis(默认不需要密码)
- 合并以上两个命令
- 查看数据卷对应的宿主机目录
- 启动nginx服务
- 停止nginx服务
- 重启nginx服务
- 在linux环境下启动并登录mysql
- 运行容器目录下的sql文件
- 容器互联
- 命令格式
- 示例
- 基于centos:7这个镜像启动cenos7容器,并加入到t-net这个网络
- 新建终端基于centos:7这个镜像启动cenos7容器,并加入到t-net这个网络
Docker安装
在线安装
安装yum包管理器工具
sudo yum install -y yum-utils
设置yum仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
```shell sudo yum-config-manager \ —add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. 更新yum缓存
```shell
sudo yum makecache fast
地址:[https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz](https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz)
或者:[https://download.docker.com/linux/static/stable/](https://download.docker.com/linux/static/stable/)
下载指定版本
- 下载离线安装工具
地址:[https://github.com/Jrohy/docker-install/](https://github.com/Jrohy/docker-install/)
- 将安装包存放至指定位置
例如:/setup/docker
文件夹下
为 install.sh添加执行权限
chmod +x install.sh
安装
./install.sh -f docker-20.10.6.tgz
**注意:**必须进入存放安装包的文件夹下执行命令
5. 查看安装状态
```shell
docker info
Docker常用指令
Docker服务常用指令
启动服务
systemctl start docker
关闭服务
systemctl stop docker
设置服务开机自启或关闭开机自启
设置开机自启
systemctl enable docker
关闭开机自启
systemctl disable docker
查看服务状态(是否启动)
systemctl status docker
重启服务
systemctl restart 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 镜像名
示例:
docker pull hello-world
浏览下载镜像
docker images
查看镜像详情
命令:
docker inspect 镜像名或镜像id
示例:
docker inspect hello-world
- 查看镜像历史
命令:
docker history 镜像名
示例:
docker history hello-world
- 导出镜像文件
导出镜像文件需要在导出后存放镜像文件的文件夹中执行命令
命令:
docker save 镜像名 | gzip > 导出后的镜像文件名.tar.gz
示例:
docker save hello-world | gzip > hello-world.tar.gz
- 删除镜像文件
命令格式:
docker image rm 镜像名或镜像id
示例:
docker image rm hello-world
- 导入镜像文件
导入镜像文件需要在镜像文件所在的文件夹下执行命令\
命令:
docker load < 镜像文件名.tar.gz
示例:
docker load < hello-world.tar.gz
- 运行镜像文件
命令:
docker run 镜像名
示例:
docker run hello-world
Doker操作容器常用命令
- -i 交互模式
- -t 终端模式
- -d 后台运行模式
- -e 指定环境(指定启动mysql时的容器密码)
- -p 端口映射
- -v 挂载(目录或者数据卷)
- —name 重命名容器
- 创建并启动容器
命令格式:
docker run -it 镜像名或镜像id bash
示例:
docker run -it centos:7 bash
注意:
- 镜像id为id前几位即可(一般前三位即可)
- -it 这是两个参数(-i表示交互式操作, -t 表示终端)
- bash 表示进入操作终端,基于交互式进行相关操作
- 查看docker中的容器
查看运行中的容器:
docker ps
查看运行中的所有容器:
docker ps -a
参数a代表all即全部
- 查看容器日志信息
命令格式:
docker container logs 容器id #自己的容器id(一般写前三位即可)
示例:
docker container logs 802 #自己的容器id(一般写前三位即可)
- 停止或重启容器
停止容器
docker container stop 容器id
重启容器
docker container restart 容器id
退出
exit
6. 删除容器
```shell
docker container rm 容器id
#删除运行中的容器
docker container -f rm 容器id
清理所有终止状态容器
docker container prune
Docker数据卷操作命令
概述
容器中数据管理有两种方式:
使用数据卷
数据卷是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,默认会一直存在,即使容器被删除。
-
命令
创建数据卷 ```shell
命令格式
docker volume create 数据卷名
示例
docker volume create container-vol
2. 查看数据卷
- 查看所有数据卷
```shell
docker volume ls
示例
docker volume inspect container-vol
3. 将数据卷挂载至指定容器
其中若容器中的目录不存在时会自动创建
```shell
#命令格式
docker run -it --mount source=数据卷名,target=容器中的文件目录 容器名 bash
#示例
docker run -it --mount source=container-vol,target=/root centos:7 bash
简写格式如下:
#格式
docker run -it -v 数据卷名:容器中文件目录 容器名 bash
#示例
docker run -it -v container-vol:/root centos:7 bash
- 删除数据卷
当数据卷被使用时无法删除,所以若要想删除数据卷应当先删除容器
#命令格式
docker volume rm 数据卷名
#示例
docker volume rm container-vol
清理无主数据卷
docker volume prune
- 挂载至指定主机目录
在启动容器时,以目录直接挂载的方式进行数据操作
#命令格式
docker run -it -v 主机文件目录:容器文件目录 容器名 bash
#示例
docker run -it -v /usr/app:/opt/app centos:7 bash
示例
docker inspect 91a #91a 为容器id
<a name="DyjEi"></a>
# 制作镜像
<a name="QHvyv"></a>
## 概述
制作镜像需要使用Dockerfile文件,Dockerfile为文本文件,其内写了关于构建镜像的各种指令,一般基于此文件来构建镜像.
<a name="d1a4w"></a>
## 制作
制作自定义jdk镜像
1. 准备
准备Centos7镜像(所有的镜像文件都需要给予一个空的操作系统镜像来制作镜像文件)<br />jdk压缩包
2. 创建Dockerfile文件
在存放jdk压缩包与centos7的文件目录中创建Dockerfile文件,代码如下:
```shell
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']
其中第一行FROM
命令标识使用的操作系统镜像,第二行ADD
命令为讲宿主机下的文件追加至容器中的指定目录下,ENV
用于设置环境变量,CMD
标识命令格式
- 创建镜像
需要在jdk以及Dockerfile所在的文件进行执行
docker build -t jdk:8 .
#不要丢掉这里的点,点表示使用本目录下的所有文件进行构建,-t表示镜像标识(镜像名),是tag单词的缩写.
- 使用JDK镜像进行sentinel启动
将sentinel的jar包拷贝至宿主机指定目录
docker run -d -p 8180:8080 --name sentinel \ #-p表示进行宿主机与容器端口映射
-v /root/servers:/usr/sca \ #-v表示进行目录挂载
jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar
- -d 表示后台运行
- -p 用于实现端口映射(假设外部要访问这个容器,必须要做端口映射)
-
示例:
制作sentinel镜像
准备jdk,sentinel压缩包,jdk压缩包
Dockerfile文件命令如下
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/
ADD sentinel-dashboard-1.8.0.jar /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]
命令详解:
ENTRYPOIN
启动sentinel的命令,EXPOSE
表示占用的容器端口Docker镜像安装
安装Mysql镜像
拉取要安装的版本的mysql
docker pull mysql:8.0.23
启动镜像
sudo docker run -p 3306:3306 --name mysql \ #端口映射并重命名为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 #数据库版本
进入mysql镜像 ```shell sudo docker exec -it mysql bash
启动服务
docker start mysql
停止服务
docker stop mysql
设置开机自启
docker update mysql —restart=always
<a name="JXaE5"></a>
## 安装Redis
1. 下载镜像文件
```shell
docker pull redis
在配置文件录下创建redis.conf配置文件
touch /usr/local/docker/redis01/conf/redis.conf
3. 创建redis实例并启动
```shell
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
- 访问redis服务器 ```shell docker exec -it redis01 bash
检查版本
redis-server -v
或
redis-cli -v
登录redis(默认不需要密码)
redis-cli
合并以上两个命令
docker exec -it redis01 redis-cli
5. 停止与启动服务
```shell
#启动redis服务
docker start redis01
#停止redis服务
docker stop redis01
#重启 redis 服务
docker restart redis01
安装Nginx
拉取nginx镜像
docker pull nginx
创建数据卷 ```shell docker volume create nginx-vol
查看数据卷对应的宿主机目录
docker inspect nginx-vol
3. 启动nginx服务
```shell
docker run --name nginx -p 80:80 -v nginx-vol:/etc/nginx -d nginx
停止nginx服务
docker stop nginx
重启nginx服务
docker restart nginx
<a name="ljIvv"></a>
## 安装Nacos
1. 拉取nacos
```shell
docker pull nacos/nacos-server:1.4.1
mysql -uroot -p
运行容器目录下的sql文件
source /etc/mysql/nacos-mysql.sql #这里的/etc/mysql为容器中的一个目录(要选择你自己挂载的目录)
3. 创建并启动nacos容器
```shell
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.126.129 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=root \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1
参数说明
- 单节点模式
MODE=standalone
- 数据库地址
MYSQL_SERVICE_HOST
- 数据库用户名
MYSQL_SERVICE_USER
- 数据库密码
MYSQL_SERVICE_PASSWORD
- 需连接的数据库名称
MYSQL_SERVICE_DB_NAME
- 端口映射
-p 8848:8848
- 任意时候重启容器,开机就能自动启动容器(需设置docker为开机自启)
容器互联
概述
Docker 中存在多个容器时,容器与容器之间经常需要进行通讯,例如nacos访问mysql,redis集群中各个节点之间的通讯。解决方案
- 两个容器通过宿主机进行通讯(容器中的端口会映射到宿主机上)
两个容器之间直接通过虚拟网络进行连接,但是需要我们在docker中创建网络。
虚拟网络设置
新建网络 ```powershell
命令格式
docker network create -d bridge 网络名称
示例
docker network create -d bridge t-net #t-net为自己起的网络名称
-d driver,网络类型,默认 bridge。
2. 查看网络信息
```powershell
#查看关于network的命令
docker network
#列出所属网络信息
docker network ls
#查看指定网络信息
docker inspect 网络id
#示例
docker inspect fa8
- 实现容器互联
```powershell
基于centos:7这个镜像启动cenos7容器,并加入到t-net这个网络
docker run -it —name app1 —network t-net centos:7 #容器名为app1
新建终端基于centos:7这个镜像启动cenos7容器,并加入到t-net这个网络
docker run -it —name app2 —network t-net centos:7 #容器名为app2
测试容器互通
```powershell
#在容器app2中
ping app1
#在容器app1中
ping app2
若能ping通则实现容器互联