docker的学习和使用(一)
一、docker的配置
(一)配置环境
ubuntu2204
(二)配置流程
因为很多配置命令都需要管理员权限,可以在配置前先将切换到管理员目录
sudo su
1.检查卸载之前的旧版本
apt-get remove docker docker-engine docker.io containerd runc
2.设置存储库
apt-get install ca-certificates curl gnupg lsb-release
ca-certificates
这个软件包包含了常用的证书颁发机构(CA)的证书,用于确保系统能够验证SSL/TLS连接的安全性。
curl
这是一个用于从命令行进行数据传输的工具,支持多种协议(如HTTP、HTTPS、FTP等)。
gnupg
这是GNU隐私守护者(GNU Privacy Guard),用于加密和签名数据。
lsb-release
这个软件包提供了一些命令,用于获取Linux Standard Base(LSB)和特定发行版的信息。
mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
--dearmor
将输入的ASCII装甲格式的GPG密钥转换为二进制格式。
从Docker官方网站下载GPG密钥,并将其转换为二进制格式后保存到系统的/etc/apt/keyrings/docker.gpg文件中,以便在安装Docker软件包时验证其真实性。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
注意: 因为近期Docker官方网站无法访问,以上的代码运行过程中会出现报错,所以可以改用国内源。
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3.安装
apt update
apt-get install docker-ce docker-ce-cli containerd.io
查询指定版本
apt-cache madison docker-ce
apt-cache
这是一个用于查询和显示有关已安装和可用软件包信息的工具。
madison
这是apt-cache的一个子命令,用于显示指定软件包的可用版本列表及其对应的存储库。
apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
将<VERSION_STRING>替换为需要的版本,例如5:20.10.23~3-0~ubuntu-jammy
4.版本锁定
# 查询软件
dpkg -l | grep docker
apt list --installed | grep docker
# 锁定软件版本
apt-mark hold docker-*
# 查看锁定
apt-mark showhold
# 解除锁定
apt-mark unhold docker-ce docker-ce-cli docker-scan-plugin docker-ce-rootless-extras
5.配置daemon.json文件
{
"oom-score-adjust": -1000,
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
},
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 10,
"bip": "169.254.123.1/24",
"dns": ["202.201.13.22"],
"data-root": "/var/lib/docker",
"insecure-registries": ["https://harbor.lzu.edu.cn"],
"registry-mirrors": ["https://jwvm07bp.mirror.aliyuncs.com"],
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]
}
# 重新加载Systemd管理的服务配置文件
systemctl daemon-reload
# 重启Docker服务
systemctl restart docker
# 显示Docker服务的状态和详细信息
systemctl status docker -l
Docker使用代理可解决内部站点无法访问公网问题,并通过代理缓存能提高下载速度。
6.配置http_proxy.conf文件
mkdir /etc/systemd/system/docker.service.d
cd /etc/systemd/system/docker.service.d/
vi http_proxy.conf
[Service]
Environment="HTTP_PROXY=http://username:password@ip:port"
Environment="HTTPS_PROXY=http://username:password@ip:port“
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
systemctl daemon-reload
systemctl restart docker
二、docker的使用
(运行wordpress)这里使用mysql8来存储数据、RockyLinux8镜像来安装apache+php环境。
# 下载一个mysql的docker镜像
docker image pull mysql:8
# 创建一个数据库数据持久化目录,用于映射mysql数据库默认存储目录/var/lib/mysql
mkdir -p /opt/mysql8_data
# 使用镜像生成容器,
docker run --name mysql8 -v /opt/mysql8_data:/var/lib/mysql -p 33061:3306 -e MYSQL_ROOT_PASSWORD=MYmysql2024 -d --restart=always mysql:8
# 查看正在运行的镜像
docker ps
# 进入mysql镜像中
docker exec -it mysql8 bash
mysql -p
mysql> create database wordpress;
mysql> create user wordpress@'%' identified by 'Wordpress!2024';
mysql> grant all privileges on wordpress.* to wordpress@'%';
mysql> exit
同时按下Ctr+P和Ctr+Q 退出容器返回到宿主机
拉取并运行RockyLinux8镜像
docker pull rockylinux/rockylinux:8
docker run -ti --name rockylinux8 -p 80:80 --restart=always rockylinux/rockylinux:8
# 更新软件
dnf update -y
# 查看当前php默认版本
dnf module list php
# php当前默认版本为7.2,修改为8.0
dnf module -y reset php
dnf module -y enable php:8.0
# 安装epel扩展软件仓库
dnf install epel-release -y
# 安装wordpress所需依赖包
dnf --enablerepo=epel -y install httpd php php-fpm php-pear php-mbstring php-pdo php-gd php-mysqlnd php-IDNA_Convert php-enchant enchant hunspell
# 修改配置文件
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.org
vi /etc/httpd/conf/httpd.conf
#167行增加index.php
DirectoryIndex index.html index.php
#最后一行增加配置隐藏版本信息
ServerTokens Prod
vi编辑器中,使用:set nu
可以显示全文的行号,便于查询
vi /etc/php-fpm.d/www.conf
# 在末尾增加php配置
php_value[max_execution_time] = 600
php_value[memory_limit] = 2G
php_value[post_max_size] = 2G
php_value[upload_max_filesize] = 2G
php_value[max_input_time] = 600
php_value[max_input_vars] = 2000
php_value[date.timezone] = Asia/Shanghai
# 创建php-fpm运行目录
mkdir -p /run/php-fpm/
# 运行php-fpm
php-fpm -D
# 运行apache
httpd -k start
# 安装ps命令包(容器内的操作缺什么工具就安装什么工具)
dnf install procps-ng -y
# 查看进程
ps -ef
生成phpinfo的验证文件
echo '<?php phpinfo(); ?>' > /var/www/html/info.php
按Ctr+p和Ctr+q退出容器返回宿主机(直接exit容器内所运行进程会被初始化)
# 由于要启动php-fpm和httpd两个进程,进入容器安装supervisor
yum install -y supervisor
vi /etc/supervisord.conf
[supervisord]
nodaemon=true
#创建要启动服务的配置文件
vi /etc/supervisord.d/startup.ini
[program:php-fpm]
command= /sbin/php-fpm -D
[program:httpd]
command=/sbin/httpd -k start
# 运行supervisord启动php-fpm和httpd服务
/bin/supervisord
cd /var/www/html/
dnf install wget
wget https://cn.wordpress.org/latest-zh_CN.zip
dnf install -y unzip
unzip latest-zh_CN.zip
# 修改权限
chown -R apache. wordpress/
# 删除下载文件
rm latest-zh_CN.zip
# 将wordpress文件放置到apache根目录
mv /var/www/html/wordpress/* /var/www/html/
rmdir /var/www/html/wordpress/
# 修改wordpress配置文件,配置数据库信息
cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
vi /var/www/html/wp-config.php
/** WordPress 数据库名称 */
define( 'DB_NAME', 'wordpress' );
/** 数据库用户名 */
define( 'DB_USER', 'wordpress' );
/** 数据库密码 */
define( 'DB_PASSWORD', 'Wordpress!2024' );
/** 数据库主机 */
define( 'DB_HOST', 'IP地址:33061' );
总结:
路径 | 含义 |
---|---|
/var/log/httpd/ | 日志文件目录 |
/etc/httpd/conf.d/php.conf | php配置文件 |
/etc/php-fpm.d/www.conf | php-fpm配置文件 |
/etc/httpd/conf/httpd.conf | apache配置文件 |
/etc/httpd/conf.d/php.conf | apache的php配置文件 |
/etc/supervisord.conf | supervisor配置文件 |
/etc/supervisord.d/startup.ini | supervisor增加的启动服务配置文件 |
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术