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增加的启动服务配置文件
posted @   柳橙23  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示