Docker入门笔记

Docker

文章目录

    • Docker
      • [1. 下载 (centos)](#1. 下载 (centos))
      • [2. 部署 MySQL](#2. 部署 MySQL)
      • [3. 常用命令](#3. 常用命令)
      • [4. 数据卷](#4. 数据卷)
      • [5. 自定义镜像](#5. 自定义镜像)
      • [6. Java 项目部署](#6. Java 项目部署)

1. 下载 (centos)

  1. 卸载旧版
shell 复制代码
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-selinux 
  1. 配置 docker 的 yum 库
  • 首先要安装一个yum工具
shell 复制代码
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  • 配置Docker的yum源(阿里云源
shell 复制代码
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
  • 更新yum,建立缓存
shell 复制代码
sudo yum makecache fast
  1. 安装 Docker
shell 复制代码
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 启动和校验
bash 复制代码
# 查看当前版本
docker -v
# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
  1. 配置镜像加速

https://cloud.tencent.com/document/product/1207/45596

2. 部署 MySQL

shell 复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql

命令解读

docker run: 创建并运行容器 -d则是让容器以后台进程运行

--name mysql : 给容器起个名字叫mysql,你可以叫别的

-p 3306:3306 : 设置端口映射。

-e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数(设置环境变量)

  • 格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
  • 案例中,TZ =Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码

mysql : 运动的镜像名字

  • 完整写法: REPOSITORY:TAG。(mysql:5.7)
  • 没有指定 tag,默认 latest

3. 常用命令

命令 说明
docker pull 拉取镜像
docker push 推送镜像到DockerRegistry
docker images 查看本地镜像
docker rmi 删除本地镜像
docker run 创建并运行容器(不能重复创建)
docker stop 停止指定容器
docker start 启动指定容器
docker restart 重新启动容器
docker rm 删除指定容器
docker ps 查看容器
docker logs 查看容器运行日志
docker exec 进入容器
docker save 保存镜像到本地压缩文件
docker load 加载本地压缩文件到镜像
docker inspect 查看容器详细信息

docker rm : 删除一个或多个 容器

docker rmi : 删除一个或多个 镜像

bash 复制代码
# 拉取最新版本 nginx 镜像
docker pull nginx
# 保存 nginx 镜像
docker save -o image/nginx.tar nginx:latest

docker rmi nginx:latest 
# 导入 nginx 镜像
docker load -i image/nginx.tar 

部署 nginx

shell 复制代码
docker run -d \
  --name nginx \
  -p 80:80 \
  nginx
bash 复制代码
# 停止容器
docker stop nginx
# 运行容器
docker start nginx

查看日志

shell 复制代码
docker logs nginx
# 持续查看日志
docker logs -f nginx

进入容器内部

shell 复制代码
docker exec -it nginx bash

docker exec -it mysql mysql -uroot -p123456

命令别名:

bash 复制代码
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'

4. 数据卷

数据卷(volume)是一个虚拟目录,是容器内目录宿主机****目录之间映射的桥梁。

以Nginx为例,我们知道Nginx中有两个关键的目录:

  • html:放置一些静态资源
  • conf:放置配置文件

如果我们要让Nginx代理我们的静态资源,最好是放到html目录;如果我们要修改Nginx的配置,最好是找到conf下的nginx.conf文件。

docker volume create 创建数据卷
docker volume ls 查看所有数据卷
docker volume rm 删除指定数据卷
docker volume inspect 查看某个数据卷的详情
docker volume prune 清除数据卷
bash 复制代码
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx


docker volume ls

docker volume inspect html 

# 查看容器数据卷挂载
docker inspect nginx

基于宿主机目录实现 MySQL 数据目录、配置文件、初始化脚本的挂载

  • 挂载/root/mysql/data到容器内的/var/lib/mysql目录
  • 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录(初始化的SQL脚本目录)
  • 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录(这个是MySQL配置文件目录)
shell 复制代码
docker run -d \
  --name mysql \
   --privileged=true \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  mysql:8.0

cnf文件

[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

5. 自定义镜像

dockerfile 复制代码
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

6. Java 项目部署

redis 部署

https://www.cnblogs.com/lzp110119/p/17869310.html

bash 复制代码
docker run \
  --restart=always \
  --log-opt max-size=100m \
  --log-opt max-file=2 \
  -p 6379:6379 \
  --name redis \
  -v /root/redis/conf/redis.conf:/etc/redis/redis.conf \
  -v /root/redis/data:/data \
  -d redis \
  redis-server /etc/redis/redis.conf \
  --appendonly yes \
  --requirepass 123456

mysql

bash 复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  mysql
sql 复制代码
docker run -e MYSQL_ROOT_PASSWORD=123456 mysql

网络互联

bash 复制代码
docker network create
docker network connect mynet redis
docker network connect mynet mysql
bash 复制代码
docker build -t proname .
bash 复制代码
docker run -d --name starry -p 8080:8080 --network mynet starry

nginx

bash 复制代码
docker run -d \
  --name nginx \
  -p 80:80 \
  -v /root/nginx/html:/usr/share/nginx/html \
  -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
  --network mynet \
  nginx

相关推荐
LN花开富贵1 小时前
stm32g431rbt6芯片中VREF+是什么?在电路中怎么设计?
笔记·stm32·单片机·嵌入式硬件·学习
qq21084629531 小时前
【stm32笔记】使用rtt-studio与stm32CubeMx联合创建项目
笔记·stm32·嵌入式硬件
陈小唬2 小时前
云服务器docker中Hbase整合java-api需要放行的接口
服务器·docker·hbase
苏少朋2 小时前
Docker安装 ▎Docker详细讲解 ▎数据卷挂载 ▎Nginx安装理解
linux·nginx·docker·容器
晚枫20002 小时前
kafka发送事件的几种方式
spring boot·分布式·docker·容器·kafka·intellij-idea·linq
liangbm32 小时前
MATLAB系列07:输入/输入函数
开发语言·数据库·笔记·matlab·函数·自定义函数·matlab函数
StevenZeng学堂3 小时前
【Kubernetes笔记】为什么DNS解析会超时?
网络协议·docker·云原生·kubernetes
开着奔驰种地3 小时前
PaddleNLP本文分类及docker部署流程
深度学习·docker·文本分类·paddle
酒饮微醉-3 小时前
论文阅读--Planning-oriented Autonomous Driving(一)
论文阅读·笔记·学习·自动驾驶
GoppViper3 小时前
golang学习笔记28——golang中实现多态与面向对象
笔记·后端·学习·golang·多态·面向对象