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 COPY phplist.conf /etc/apache2/sites-available/phplist.conf 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. 清理未使用的资源
2. 清理所有未使用的容器
3. 清理所有未使用的镜像
4. 清理所有未使用的卷
5. 清理所有未使用的网络
6. 清理所有未使用的构建缓存 如果你使用了 Docker 的构建功能,可以清理构建缓存:
7. 清理所有资源 如果你希望一次性清理所有未使用的资源,可以直接运行:
数据库 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中命令 docker
中mysql/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 .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:
在SSMS中,右键点击数据库。
选择“任务”->“备份”。
按照向导操作,指定备份文件路径和备份选项。
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 COPY phplist.conf /etc/apache2/sites-available/phplist.conf RUN a2ensite phplist.conf && \ a2dissite 000-default.conf && \ rm /var/www/html/index.html
docker
中apache2
命令
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 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 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 mv /var/www/html/admin /var/www/html/admin1
sudo
:如果你没有足够的权限来重命名目录,sudo
可以让你以超级用户权限执行命令。
mv
:移动或重命名文件或目录的命令。
/var/www/html/admin
:这是你要重命名的目录的当前路径。
/var/www/html/admin1
:这是你想要的新目录名。