docker study

docker

安装

首先如果系统中已经存在旧的 Docker,则先卸载:

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    docker-selinux 

安装一个 yum 工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安装成功后,执行命令,配置 Docker 的 yum 源(已更新为阿里云源):

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,建立缓存

sudo yum makecache timer

安装 Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

启动

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

这里使用服务器安装

image-20241016140617437

使用阿里云镜像加速

image-20241016141138821

部署 MySQL

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

*Docker会自动搜索并下载MySQL。注意:这里下载的不是安装包,而是镜像(image)镜像中不仅包含了MySQL本身,还包含了其运行所需要的环境、配置、系统级函数库。因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了。这套独立运行的隔离环境我们称为容器(container)

解读:

  • docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行
  • --name mysql : 给容器起个名字叫mysql,你可以叫别的
  • -p 3306:3306 : 设置端口映射
    • 容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
    • 容器内端口往往是由容器内的进程决定,例如 MySQL 进程默认端口是 3306,因此容器内端口一定是 3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
    • 格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的 3306 映射到容器内的 3306 端口(有多个mysql容器就可以设置3307,3308)
  • -e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数
    • 格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
    • 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置 MySQL 默认密码
  • mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像
    • 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号
    • 在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
# 用基本命令,寻找 Networks.bridge.IPAddress 属性
docker inspect mysql
image-20241016144703533

这个 ip 地址是对外隔离的

链接 docker 创建的 mysql:

mysql -h 172.0.0.1 -P 3306 -u root -p

输入密码 123

在外网访问时,是访问不到 docker 的 mysql 的 IP 172.17.0.2 的,所以直接访问服务器地址,3306 端口 映射 到 172.17.0.2:3306

image-20241016150355659

常见命令

image-20241016150650791

docker 镜像仓库

Docker Hub Container Image Library | App Containerization

数据卷(volume)

挂载数据卷

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

存放数据卷的目录:/var/lib/docker/volumes

命令 说明 文档地址
docker volume create 创建数据卷 docker volume create
docker volume ls 查看所有数据卷 docs.docker.com
docker volume rm 删除指定数据卷 docs.docker.com
docker volume inspect 查看某个数据卷的详情 docs.docker.com
docker volume prune 清除数据卷 docker volume prune

inspect v.检查,审视;检阅,视察;进行检查,进行视察

一般在创建容器的时候指定数据卷的挂载

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

html 是数据卷的名字

数据卷挂载的容器目录 /usr/share/nginx/html

(这里使用Nginx,端口号默认80)

这样实现了 双向绑定

挂载本地目录或文件

​ 数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似:

# 挂载本地目录
-v 本地目录:容器内目录
# 挂载本地文件
-v 本地文件:容器内文件

注意:本地目录或文件必须以 /./开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /root/mysql/data:/var/lib/mysql \
  -v /root/mysql/conf:/etc/mysql/conf.d \
  -v /root/mysql/init:/docker-entrypoint-initdb.d \
  mysql

服务器用的是数据卷

image-20241016154231071

镜像

docker 的镜像是分层的:

image-20241016155820965

已经存在的层,再去 pull,就会省略
image-20241016155924813

指令 说明 示例
FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量,可在后面指令使用 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./xx.jar /tmp/app.jar
RUN 执行Linux的shell命令,一般是安装过程的命令 RUN yum install gcc
EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的 EXPOSE 8080
ENTRYPOINT 镜像中应用的启动命令,容器运行时调用 ENTRYPOINT java -jar xx.jar
posted @   RainNan  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示

目录导航