Docker笔记

180 阅读2分钟

安装

以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})