Dockerfile学习笔记

docker

Docker学习笔记

搭建完成Dockerfile后的导出数据库和var/www/html整个步骤

docker ps查看序列号

docker exec -it xxxx /bin/bash进入容器

将数据库dump下来

1
2
mysqldump -u [用户名] -p [数据库名] > [导出文件名].sql
Enter Password:输入你的数据库密码

exit退出容器

1
2
3
4
5
#将数据库复制到本机
docker cp f1c88e98728c:database.sql /home/XU17/XU/dockerfile

#将源码复制到本机
docker cp f1c88e98728c:/var/www/html/ /home/XU17/XU/dockerfile

Dockerfile中修改

1
2
3
4
5
6
# 将源码复制到容器中
COPY files/. /var/www/html/

# 导入数据库架构
RUN service mariadb start && \
mysql -u fuel -ppassword fuel < /data/fuel_schema.sql

配置文件导入(apache2为例),Dockerfile中这样改

1
2
3
4
5
6
7
8
9
# Step 8: Copy Apache virtual host configuration

COPY phplist.conf /etc/apache2/sites-available/phplist.conf

# Step 9: Enable the PHPList site and disable the default site

RUN a2ensite phplist.conf && \
a2dissite 000-default.conf && \
rm /var/www/html/index.html

打包

1
tar -czvf fuel.tar.gz fuel

docker命令

删除

1
2
3
4
docker ps -a
docker rm XXXX
docker images
docker rmi XXXX

在使用 Docker 时,清理缓存通常指的是清理 Docker 的镜像、容器、卷和网络等资源,以释放磁盘空间。以下是一些常用的命令来清空 Docker 缓存:

1. 清理未使用的资源

1
docker system prune
  • 这个命令会清理所有未使用的容器、网络、镜像(不包括标签为 <none> 的镜像)和卷。

  • 如果希望同时清理未使用的镜像(包括悬空的镜像),可以加上 -a 参数:

    1
    docker system prune -a

2. 清理所有未使用的容器

1
docker container prune
  • 这个命令会删除所有未运行的容器。

3. 清理所有未使用的镜像

1
docker image prune
  • 默认情况下,只会清理悬空的镜像(即没有标签的镜像)。

  • 如果希望清理所有未使用的镜像,可以加上 -a 参数:

    1
    docker image prune -a

4. 清理所有未使用的卷

1
docker volume prune
  • 这个命令会删除所有未被容器使用的卷。

5. 清理所有未使用的网络

1
docker network prune
  • 这个命令会删除所有未被容器使用的网络。

6. 清理所有未使用的构建缓存

如果你使用了 Docker 的构建功能,可以清理构建缓存:

1
docker builder prune
  • 如果希望清理所有构建缓存,可以加上 -a 参数:

    1
    docker builder prune -a

7. 清理所有资源

如果你希望一次性清理所有未使用的资源,可以直接运行:

1
docker system prune -a
  • 这个命令会清理所有未使用的容器、镜像、卷和网络。

数据库

1
2
3
4
RUN apt-get update && 
apt-get install -y \
apache2 \
mariadb-server \

特别注意!!! 使用mariadb启动时 需要使用service mariadb start 而不是service mysql start

1
2
3
4
5
RUN service mariadb start && \
mysql -e "CREATE DATABASE itop;" && \
mysql -e "CREATE USER 'itop'@'localhost' IDENTIFIED BY 'password';" && \
mysql -e "GRANT ALL PRIVILEGES ON itop.* TO 'itop'@'localhost';" && \
mysql -e "FLUSH PRIVILEGES;"

结尾

1
2
# 启动服务
CMD service php8.1-fpm start && service apache2 start && service mariadb start && tail -f /var/log/apache2/error.log

dump数据库

将数据库导出(dump)通常是指将数据库中的数据和结构以某种格式(如SQL文件或备份文件)保存到磁盘或其他存储介质中,以便后续恢复或迁移。不同的数据库管理系统(DBMS)有不同的导出方法。以下是一些常见数据库的导出方法:

1. MySQL/Mariadb

MySQL是最常用的开源数据库之一,可以使用mysqldump工具来导出数据库。

基本命令:

1
mysqldump -u [用户名] -p[密码] [数据库名] > [导出文件名].sql

docker exec -it xxxx /bin/bash进入容器

1
2
mysqldump -u [用户名] -p [数据库名] > [导出文件名].sql
Enter Password:

示例:

1
mysqldump -u root -p123456 my_database > my_database_backup.sql

选项说明:

  • -u:指定数据库用户名。
  • -p:指定用户密码(如果密码复杂,建议在提示时手动输入)。
  • my_database:要导出的数据库名称。
  • my_database_backup.sql:导出的文件名。

docekr中命令

dockermysql/Mariadb命令

1
2
3
4
5
6
7
8
9
10
11
#查看状态
service mysql/mariadb status

#启动
service mysql/mariadb start

#重载
service mysql/mariadb reload

#重启
service mysql/mariadb restart

高级选项(用不到):

  • 如果只想导出表结构,不导出数据:

    1
    mysqldump -u root -p123456 --no-data my_database > my_database_structure.sql
  • 如果只想导出数据,不导出表结构:

    1
    mysqldump -u root -p123456 --no-create-info my_database > my_database_data.sql
  • 导出所有数据库:

    bash复制

    1
    mysqldump -u root -p123456 --all-databases > all_databases.sql

2. PostgreSQL

PostgreSQL使用pg_dump工具来导出数据库。

基本命令:

1
pg_dump -U [用户名] -W [数据库名] > [导出文件名].sql

示例:

1
pg_dump -U postgres -W my_database > my_database_backup.sql

选项说明:

  • -U:指定数据库用户名。
  • -W:提示输入用户密码。
  • my_database:要导出的数据库名称。
  • my_database_backup.sql:导出的文件名。

高级选项:

  • 导出为自定义格式(压缩备份):

    bash复制

    1
    pg_dump -U postgres -W -F c my_database > my_database_backup.dump
  • 导出所有数据库:

    bash复制

    1
    pg_dumpall -U postgres -W > all_databases.sql

3. SQLite

SQLite是一个轻量级的数据库,通常用于小型应用或嵌入式系统。导出SQLite数据库时,可以直接复制数据库文件(通常是.db.sqlite文件),或者使用SQL命令导出为SQL文件。

示例:

sql复制

1
2
3
4
5
-- 在SQLite命令行工具中
.mode insert
.output my_database_backup.sql
.dump
.output stdout

4. SQL Server

SQL Server使用sqlcmd工具或SQL Server Management Studio(SSMS)来导出数据库。

使用sqlcmd

1
sqlcmd -S [服务器名] -U [用户名] -P [密码] -d [数据库名] -Q "BACKUP DATABASE [数据库名] TO DISK = '[备份文件路径].bak'"

示例:

1
sqlcmd -S localhost -U sa -P 123456 -d my_database -Q "BACKUP DATABASE my_database TO DISK = 'C:\backup\my_database.bak'"

使用SSMS:

  1. 在SSMS中,右键点击数据库。
  2. 选择“任务”->“备份”。
  3. 按照向导操作,指定备份文件路径和备份选项。

5. Oracle

Oracle数据库使用expdp(数据泵)工具来导出数据库。

基本命令:

1
expdp [用户名]/[密码] DIRECTORY=[目录对象] DUMPFILE=[导出文件名].dmp LOGFILE=[日志文件名].log

示例:

1
expdp system/123456 DIRECTORY=my_dir DUMPFILE=my_database_backup.dmp LOGFILE=my_database_backup.log

选项说明:

  • DIRECTORY:Oracle目录对象,指向文件系统路径。
  • DUMPFILE:导出的备份文件名。
  • LOGFILE:日志文件名。

6. MongoDB

MongoDB是一个NoSQL数据库,使用mongodump工具来导出数据。

基本命令:

bash复制

1
mongodump --host [主机名] --port [端口号] --username [用户名] --password [密码] --db [数据库名] --out [导出目录]

示例:

bash复制

1
mongodump --host localhost --port 27017 --db my_database --out /backup/my_database_backup

选项说明:

  • --db:指定要导出的数据库名称。
  • --out:指定导出的目录路径。

导入数据库

1
mysql -u root -p123456 database_name < /path/database.sql

服务器

apache2

1
2
3
RUN apt-get update && 
apt-get install -y \
apache2 \

xxxx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
<VirtualHost *:80>
ServerAdmin admin@your_domain
DocumentRoot /var/www/html/
ServerName localhost
<Directory /var/www/html/>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
1
2
3
4
5
6
7
# Step 8: Copy Apache virtual host configuration
COPY phplist.conf /etc/apache2/sites-available/phplist.conf

# Step 9: Enable the PHPList site and disable the default site
RUN a2ensite phplist.conf && \
a2dissite 000-default.conf && \
rm /var/www/html/index.html

dockerapache2命令

1
2
3
4
5
6
7
8
9
10
11
#查看状态
service apache2 status

#启动
service apache2 start

#重载
service apache2 reload

#重启
service apache2 restart

nginx

1
2
3
4
RUN apt-get update -y && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
nginx \

导入docker

xxxx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
listen 80;
server_name localhost;
root /var/www/html/grav;

index index.html index.php;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { return 403; }
location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
location ~* /user/.*\.(txt|md|yaml|yml|php|pl|py|cgi|twig|sh|bat)$ { return 403; }
location ~ /(LICENSE\.txt|composer\.lock|composer\.json|nginx\.conf|web\.config|htaccess\.txt|\.htaccess) { return 403; }

location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}

导入docker

1
2
3
4
# 配置Nginx
COPY files/fuel.conf /etc/nginx/conf.d/fuel.conf
RUN rm /etc/nginx/sites-enabled/default && \
nginx -t

php

配置php.ini,在Dockerfile中可以这样操作,可以不用替换文件

1
2
3
4
5
# 配置PHP设置
RUN sed -i 's/memory_limit = .*/memory_limit = 256M/' /etc/php/8.1/fpm/php.ini && \
sed -i 's/upload_max_filesize = .*/upload_max_filesize = 100M/' /etc/php/8.1/fpm/php.ini && \
sed -i 's/max_execution_time = .*/max_execution_time = 360/' /etc/php/8.1/fpm/php.ini && \
sed -i 's/;date.timezone =/date.timezone = UTC/' /etc/php/8.1/fpm/php.ini

文件夹操作

要将 /var/www/html/admin 目录重命名为 /var/www/html/admin1,可以使用 mv 命令。mv 命令用于移动或重命名文件和目录。

以下是具体步骤:

  1. 打开终端。

  2. 输入以下命令:

    1
    mv /var/www/html/admin /var/www/html/admin1
    • sudo:如果你没有足够的权限来重命名目录,sudo 可以让你以超级用户权限执行命令。
    • mv:移动或重命名文件或目录的命令。
    • /var/www/html/admin:这是你要重命名的目录的当前路径。
    • /var/www/html/admin1:这是你想要的新目录名。

Dockerfile学习笔记
https://xu17.top/2025/02/22/Docker学习笔记/
作者
XU17
发布于
2025年2月22日
许可协议
XU17