暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker的极简入门知识整理

济南小老虎 2025-04-20
147

背景

容器是十几年前火起来的一个技术.
可以理解为是轻量级的虚拟机解决方案.
他的使用其实很简单.
这里进行一些基本的知识整理.
使用经典的Docker,而不是podman/containerd等.


下载

Linux里面 Anything is file 
Docker已经不是很多操作系统预装的容器管理软件
又因为太平洋的两个大国的一些纷争
所以建议是离线下载与安装.
官方地址:
https://download.docker.com/linux/static/stable/x86_64/
在linux上面下载的方法为:
截止2025.4最新版的容器:
cd /
wget https://download.docker.com/linux/static/stable/x86_64/docker-28.1.0.tgz
tar -zxvf docker-28.1.0.tgz


安装

需要说明 Docker可以理解为是一个 CS架构的软件
dockerd 提供Server服务
docker  提示命令行方式管理

不考虑后台服务的情况下
scp docker/* usr/bin 
nohup dockerd & 
docker --version 
显示结果为:
Docker version 28.1.0, build 4d8c241


简单使用-简单分类

docker pull 拉取镜像-类比于克隆虚拟机
docker run  运行镜像-类比于开启虚拟机
docker build 创建镜像-类比自己创建特定配置虚拟机
docker exec  进入容器-类比于远程虚拟机
docker ps    查看容器-虚拟机控制台看多少虚拟机在运行
docker stats 查看容器的使用情况- top 命令
docker rm    删除容器或者是镜像
docker save  将镜像导出
docker load  将镜像导入
docker tag   给镜像打标签


命令介绍

docker pull 
因为境内禁止了 docker hub 的访问
所以建议使用 阿里云进行下载
比如我们下载MySQL的基础镜像
docker pull mysql:8.2.0

Error response from daemon: 
Get "https://registry-1.docker.io/v2/": dial tcp 108.160.167.158:443: 
connect: connection refused
建议使用境内的镜像源

mkdir -p etc/docker 
cat >/etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]
}
EOF
killall dockerd 
sleep 2
nohup dockerd & 

docker pull mysql:8.3.0 
# 我这边服务器总是失败, 建议是通过docker save和 import的方式进行

一个比较好的镜像网站是: 
https://docker.aityp.com/


命令介绍

docker save && docker load  
1. 境外虚拟机:  最新的mysql LTS版本
docker pull mysql:8.4.5 
2. 查看镜像大小: 
REPOSITORY    TAG         CREATED         SIZE
mysql         8.4.5       2 days ago      776MB
3. 导出
docker save mysql:8.4.5 |gzip >mysql8.4.5.tar.gz 
222M   mysql8.4.5.tar.gz
可以使用 | 管道符号直接压缩,效率较快
4. 导入
将tar.gz文件传输到本地: 
docker load -i mysql8.4.5.tar.gz


镜像数据库运行

创建参数文件:
mkdir -p mysql3308/mysql
cat >/mysql3308/mysql/my.cnf <<EOF
[mysqld]
datadir=/mysql/data
max_allowed_packet = 1G
innodb_log_file_size = 512M
innodb_log_buffer_size = 512M
innodb_file_per_table = 1
innodb_buffer_pool_size=8G
innodb_flush_log_at_trx_commit=0
max_connections=2000
lower-case-table-names=1
innodb_strict_mode = 0
character_set_server=utf8
secure_file_priv = 
default-time-zone='+08:00'
transaction-isolation = READ-COMMITTED
#skip-grant-tables
[mysql]
prompt="\\u@\\h : \\d \\r:\\m:\\s>"
default-character-set=utf8
EOF
chmod 700 mysql3308/mysql/my.cnf 
chown mysql:mysql mysql3308 -R

# 如下是启动数据库服务的命令

docker run --privileged=true  --name mysql3308 \
-p 3308:3306 -v mysql3308/mysql:/var/lib/mysql  \
-v mysql3308/mysql-files:/var/lib/mysql-files \
-v mysql3308/mysql/my.cnf:/etc/my.cnf -v mysql3308/log:/var/log  \
-e MYSQL_ROOT_PASSWORD=Test20131127  -e TZ=Asia/Shanghai -d mysql:8.4.5  \
--defaults-file=/var/lib/mysql/my.cnf 


查看参数是否生效

登录
docker exec -it mysql3308 bash
mysql -uroot -pTest20131127
SHOW VARIABLES WHERE Variable_name IN ('max_connections''innodb_strict_mode',\
'lower_case_table_names','transaction_isolation','version','time_zone');

不需要了后者是有错误的话 可以删除容器
docker rm -f mysql3308


部分参数说明

--name 指定容器的名字
镜像是不变的, 容器相对于镜像是一个运行态+可写入的层.
-p 端口映射. 外部端口:内部端口
-v volueme 磁盘路径挂载
-e 指定环境变量, 可以是密码或者是时区等.
-d daemon 后台运行,
--defualt-files 默认配置文件.
-it 交互+tty的方式进行与容器的交互
-f force 强制的含义


打包镜像

本次以java打包镜像为例进行.
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:8u442-b06-jdk-noble
# 修改镜像名字
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:8u442-b06-jdk-noble  eclipse-temurin:8u442-b06-jdk-noble
# 编写相关dockerfile 
FROM eclipse-temurin:8u442-b06-jdk-noble
RUN apt-get update  && apt-get -y install fontconfig && \
    apt-get install -y locales && rm -rf var/lib/apt/lists/* \   
    && localedef -i zh_CN -c -f UTF-8 -A usr/share/locale/locale.alias zh_CN.UTF-8
WORKDIR  /usr/share/fonts/
ADD  myfonts.tar.gz   usr/share/fonts/
RUN     fc-cache
ADD zh.tar.gz usr/lib/locale
ENV LANG zh_CN.utf8
ENV TZ=Asia/Shanghai
RUN ln -snf usr/share/zoneinfo/$TZ /etc/localtime && echo'$TZ' > etc/timezone

创建一下其他的文件, 比如上面ADD的  myfonts.tar.gz 和 zh.tar.gz 
生成进行
docker build . -t openjdk_442


检查

docker run -it openjdk_442 bash 
执行命令:
fc-list 确认包含字体
env 查看是否中文
里面可以看 TZ的时区信息

确定java版本: 
 java -version
openjdk version "1.8.0_442"
OpenJDK Runtime Environment (Temurin)(build 1.8.0_442-b06)
OpenJDK 64-Bit Server VM (Temurin)(build 25.442-b06, mixed mode)


参数说明

FROM 镜像的基础镜像,可以理解为是基于谁去做的
RUN  镜像内执行命令, 比如可以安装软件,也可以执行脚本
ADD  将文件解压缩并且添加到指定路径.
ENV  指定环境变量
COPY 复制文件, 不需要解压缩
CMD  容器内默认执行的命令.


文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论