安装
以centos 7为例
- 先去通义千问 搜索安装步骤不能够启动Docker
- 安装完成之后不能够拉取镜像,需要配置相关文件
- 创建配置文件 /etc/docker/daemon.json
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://6k0ibwjk.mirror.aliyuncs.com"
]
}
重新加载守护进程配置并重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
docker常用指令
- docker pull 拉取镜像
- docker images 查看镜像
- docker rmi 删除镜像
- 自定义镜像 DOCKERFIEL
启动容器
- docker start 启动容器内进程 容器还在
停止容器
- docker stop 容器内进程停止了 容器还在
进入容器
- docker exec -it nginx bash 进入容器已终端的方式交互
删除容器
- docker rm
查看容器状态
- docker ps 查看运行中的
- docker ps -a 所有的
本地目录挂载
- -v 本地目录:容器内目录 可以完成本地目录挂载 删除容器后 数据不会丢失
docker run -d --name mysql -v /usr/local/docker_mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=rootroot mysql
网络
-
容器间可以互相ping通 但是ip地址可能会发生变化 所以需要网络的存在
-
通过容器名相互访问
-
进入容器 ping 容器名
-
可以在创建容器的时候 直接加入相关的网络 --network xxx
-
docker network create 创建一个网络
-
docker network ls 查看所有网络
-
docker network rm 删除指定网络
-
docker network prunt 清除未使用的网络
-
docker network connect 使指定容器连接加入某网络 docker network connect 网络名 容器名
-
docker network disconnect 使指定容器连接离开某网络
-
docker network inspect 查看网络详细信息
自自定义镜像 DOCKERFIEL
- 基础镜像 层 入口
- FROM 指定基础镜像 FROM centos:6
- ENV 设置环境变量,可在后面指令使用 ENV key value
- COPY 拷贝本地文件到镜像的指定目录 copy ./jrell.tar.gz /tmp
- RUN 执行linux的shell命令 一般是安装过程中的命令 RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path
- EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 EXPOSE 8080
- ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xxx.jar
# 示例Dockerfile文件
# 使用 centos:7 镜像作为运行时环境
FROM centos:7
# 设置工作目录
WORKDIR /root/
# 将本地打包好的可执行文件复制到容器中
COPY main .
# 将配置文件复制到容器中
COPY config.yaml .
# 静态资源目录
COPY upload /root/upload
# 确保可执行文件具有可执行权限
RUN chmod +x main
# 暴露应用程序的端口
EXPOSE 9001
# 启动应用程序
CMD ["./main"]
制作自定义镜像
docker build -t dian_xiao_er:1.0 .
运行自定义镜像
docker run -d -p 9001:9001 --name dian_xiao_er dian_xiao_er:1.0
Docker安装Nginx
安装
docker pull nginx
先挂载相关目录与nginx配置文件
- /yzw_docker_mount/nginx/conf/default.conf
server {
listen 8000;
server_name localhost;
location / {
root /usr/share/nginx/html/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /dxeApi {
proxy_pass http://47.98.199.253:9001;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html/docs-dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
}
Docker启动Nginx
docker run -d -p 80:80 -p 8000:8000 --name nginx \
-v /usr/local/yzw_docker_mount/nginx/conf:/etc/nginx/conf.d \
-v /usr/local/yzw_docker_mount/nginx/html:/usr/share/nginx/html \
nginx
Docker安装Mysql镜像
安装
docker pull mysql
创建对应的数据库挂载目录
/usr/local/docker_mysql/data
运行Mysql容器
docker run -d --name mysql -v /usr/local/docker_mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=rootroot mysql
数据库备份操作
备份整个数据库:可以使用如下命令来备份整个数据库到一个SQL文件中
mysqldump -u root -p dbname > backupfile.sql
将这个文件转入docker容器中进行备份
docker cp /path/to/backup.sql mysql_container:/var/lib/mysql/
验证文件传输
docker exec -it mysql_container bash
ls /var/lib/mysql/
启动MySQL客户端
mysql -u root -p
CREATE DATABASE IF NOT EXISTS new_database;
USE new_database;
导入SQL文件
source /var/lib/mysql/backup.sql;
验证导入结果
SHOW TABLES;
退出
exit
exit
清理临时文件(可选)
docker exec -it mysql_container bash
rm /var/lib/mysql/backup.sql
自动化脚本示例
- 新建一个.sh文件,例如:backup.sh
- 先进入docker容器去创建对应的数据库
#!/bin/bash
# 定义变量
SQL_FILE="/path/to/backup.sql"
CONTAINER_NAME="mysql_container"
DB_NAME="new_database"
# 复制SQL文件到容器
docker cp $SQL_FILE ${CONTAINER_NAME}:/var/lib/mysql/
# 导入SQL文件内容
docker exec -i ${CONTAINER_NAME} sh -c "mysql -uroot -proot_password ${DB_NAME} < /var/lib/mysql/$(basename ${SQL_FILE})"
# 清理临时文件
docker exec -it ${CONTAINER_NAME} rm /var/lib/mysql/$(basename ${SQL_FILE})