一、安装
安装官网:https://docs.docker.com/engine/install/centos/
1、卸载docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装yum工具包以及配置yum源
# 工具包
yum install -y yum-utils
# 配置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
问题:Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] curl#7 - “Failed to connect to 2a03:2880:f12a:83:face:b00c:0:25de: Network is unreachable”
服务器下载docker的镜像仓库失败,切换成阿里云的镜像下载
解决方法:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、启动docker
systemctl start docker
5、运行镜像
docker run hello-world
6、配置镜像加速(腾讯云为例)
(1)创建json配置文件
vim /etc/docker/daemon.json
(2)添加配置到daemon.json中
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
(3)重启docker
systemctl restart docker
(4)查看信息
docker info
二、docker安装mysql
运行命令
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
三、命令解读
例子
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
docker run :创建并运行一个容器
-d : 让容器在后台运行
–name :给容器定义一个名字,必须唯一
-p 3306:3306 : 设置端口映射 (第一个端口是宿主机端口,第二个端口是容器内端口)
-e KEY=VALUE :设置环境变量(key和value形式配置)
mysql : 最后一个是镜像名字,标准写法是 repositiry:tag ( 名字:版本)
四、常见命令
1、拉取镜像
docker pull
2、查看本地镜像
docker images
3、删除镜像
docker rmi -f 镜像名称:版本号
4、保存镜像到本地(以nginx镜像为例子)
docker save -o nginx.tar nginx:latest
docker save -o "镜像打包名称".格式 "所要打包的镜像名":"版本号"
5、加载镜像
docker load -i "镜像名称"."格式"
6、创建并运行容器
docker run -d --name nginx2 -p 81:80 nginx
docker run -d --name "镜像名称" -p "宿主机端口":"容器端口" "容器名称"
7、启动和停止容器运行
# 开始
docker start "容器名称"
# 停止
docker stop "容器名称"
8、查看日志
docker logs "容器名"
docker logs -f "容器名" # 在控制台持续输出
9、进入容器内部
# -it表示添加一个可输入终端 交互方式:bash 表示用命令行交互
docker exec -it "容器名" "交互方式"
# 退出方式
exit
10、删除容器
# -f 表示强制删除
docker rm -f "容器名"
11、查看容器
# -a 表示查看所有的容器,不添加只可以查看当前正在运行中的容器
docker ps -a
五、数据卷
1、挂载数据卷
(1)、在容器创建并执行的时候就将数据卷进行挂在
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
docker run -d --name nginx -p 80:80 -v "数据卷名称":"容器内对应的目录" nginx
(2)、查看宿主机的数据卷
docker volume ls
(3)、查看数据卷的具体信息
docker volume inspect "数据卷"
(4)、删除数据卷
docker volume rm "数据卷名称"
(5)、清除数据卷
docker volume prune
2、本地目录挂载
提示:
- 在执行docker run 命令时,使用 -v 本地目录:容器内目录 可以完成本地目录挂载
- 本地目录必须以 “/” 或者 “./” 开头,如果直接以名称开头,会被识别为数据卷而非本地本地目录
- -v mysql:/var/lib/mysql 会被识别为一个数据卷叫做mysql
- -v ./mysql:/var/lib/mysql 会被识别为在当前目录下的mysql目录
以mysql为例,需要查阅mysql的镜像中,对应配置在容器内的挂载目录
mysql镜像地址:https://hub.docker.com/_/mysql
初始脚本挂载地址:
/docker-entrypoint-initdb.d
配置地址:
/etc/mysql/conf.d
数据地址:
/var/lib/mysql
(1)、在docker run 命令中进行挂载
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /var/local/mysql/data:/var/lib/mysql \ # 数据库挂载
-v /var/local/mysql/conf:/etc/mysql/conf.d \ # 配置文件挂载
-v /var/local/mysql/init:/docker-entrypoint-initdb.d \ # 初始化脚本挂载
mysql
注意:
如果需要在创建容器时就让配置文件生效,让脚本运行,则需要先创建本地目录的脚本与配置文件
脚本示例:
CREATE DATABASE IF NOT EXISTS docker_test;
USE docker_test;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com');
INSERT INTO users (username, email) VALUES ('user2', 'user2@example.com');
配置文件示例:
[mysqld]
# 设置3306端口
port=3306
# 允许最大连接数
max_connections=100
# 服务端使用的字符集默认为UTF8MB4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 设置SQL模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
# 设置客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置客户端连接服务端时默认使用的端口和字符集
port=3306
default-character-set=utf8mb4
(2)、查看是否已经创建成功进入本地目录 /var/local/mysql/data,查看data目录是否生成表和执行初始化的数据表
六、DockerFile文件
Dockerfile基础指令
指令 | 说明 | 示例 |
---|---|---|
FORM | 指定基础镜像 | FORM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./jre11.tar.gz /tmp |
RUN | 执行linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jre11.tar.gz && EXPORTS path=/tmp/jre11:$path |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
七、自定义镜像
命令
docker build -t myImage:1.0 .
命令解析
- -t : 给镜像起名,格式依然是 repository:tag的格式,不指定tag时。默认为latest(最新版本)
- . : 是指定Dockerfile所在目录,如果就在当前目录,则指定为 “.”
制作镜像
(1)、拉取openjdk8镜像
docker pull openjdk:8u121-jdk-alpine
(2)、准备一个demo的jar包
(3)、编写Dockerfile配置文件
# 基础镜像
FROM openjdk:8u121-jdk-alpine
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /tmp/app.jar
#开放端口
EXPOSE 9991
# 入口
ENTRYPOINT ["java", "-jar", "/tmp/app.jar"]
(4)、进入上传目录,执行制作镜像命令
docker build -t docker-demo .
(5)、运行镜像(自定义镜像)
第一个端口为宿主机端口,第二个端口为容器内端口
docker run -d --name dd -p 8080:9991 docker-demo
八、容器网络
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上
创建网络命令
命令 | 说明 | 地址文档 |
---|---|---|
docker network create | 创建一个网络 | |
docker network ls | 查看所有网络 | |
docker network rm | 删除指定网络 | |
docker network prune | 清除未使用网络 | |
docker network connect | 使指定容器连接加入某网络 | |
docker network discounect | 使指定容器连接离开某网络 | |
docker network inspect | 查看网络详情信息 |
示例:
(1)创建一个网络
docker network create dockernettest # 创建一个名为dockernettest的网络
(2)将mysql连接到该网络中
网络名在前,容器名在后
docker network connect dockernettest mysql
(3)检查是否连接上,使用命令查看容器详情信息即可看到该网络
docker inspect mysql
九、DockerCompose
基础命令
docker compose [OPTIONS] [COMMAND]
类型 | 参数或指令 | 说明 |
---|---|---|
options | -f | 指定compose文件的路径和名称 |
-p | 指定project名称 | |
commands | up | 创建并启动所有service容器 |
down | 停止并移除所有容器、网络 | |
ps | 列出所有启动的容器 | |
logs | 查看指定容器的日志 | |
stop | 停止容器 | |
start | 启动容器 | |
restart | 重启容器 | |
top | 查看运行进程 | |
exec | 在指定的运行中容器中执行命令 |
安装docker-compose
下载安装包
curl -L https://get.daocloud.io/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
赋予权限
chmod a+x /usr/local/bin/docker-compose
查看版本
docker-compose --version
设置软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
十、docker安装MongoDB
docker run --restart=always --name my-mongo -p 27018:27017 -v /app/docker-space/mongo:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=1234567 -d mongo --auth
进入容器内部进行查询:
1、1、进入MongoDB容器中
sudo docker exec -it my-mongo bash
2、查询MongoDB的命令所在目录(容器中的目录)
whereis mongod
3、使用命令进入MongoDB
mongosh
4、切换数据库
use boatol;
5、验证数据库用户名密码权限(用户名和密码需要用双引号,单引号会验证不通过)
db.auth("admin", "1234567");
6、以上步骤执行完后,可使用查询命令进行操作
systemctl daemon-reload
systemctl start docker.service
十一、自定义安装nginx
1、首先启动一个新的nginx容器
docker run -d --name nginx2 -p 80:80 nginx
2、将容器中的目录拷贝出来,方便挂载
docker cp mynginx:/etc/nginx /home/nginx
docker cp mynginx:/var/log/nginx /home/nginx/log
docker cp mynginx:/usr/share/nginx/html /home/nginx/html
3、删除容器,重新创建
4、注意点
- 修改配置文件中的目录时,使用的是镜像地址,例如:/home/nginx/nginx.conf,那么在配置文件中应该是 /etc/nginx/nginx.conf
- 在宿主机上的文件地址,nginx镜像使用时,因为已经挂载到了容器内,所以也要使用容器内的地址,不可直接使用宿主机上的目录地址
执行命令
docker run --name mynginx -p 80:80 -p 443:443 -v /home/nginx:/etc/nginx -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/log:/var/log/nginx -d nginx