使用docker安装常见软件
阅读数:289 评论数:0
跳转到新版页面分类
应用软件
正文
一、安装redis
1、运行命令
docker run -d \
--name redis \
-p 6379:6379 \
redis:latest
2、持久化配置
如果需要持久化 Redis 数据:
docker run -d \
--name redis \
-p 6379:6379 \
-v /path/to/redis/data:/data \
redis:latest \
redis-server --appendonly yes
/path/to/redis/data
是主机上的数据存储路径。
3、修改redis配置
如设置密码
(1)方式一,直接在运行容器时使用环境变量配置
docker run -d \
--name redis \
-p 6379:6379 \
redis:latest \
redis-server --requirepass yourpassword
--requirepass yourpassword
设置 Redis 的访问密码。
(2)方式二,将自定义的redis.conf文件挂载到容器中,以替代默认的配置文件
- 在宿主机上创建一个 Redis 配置文件
redis.conf
:
requirepass yourpassword
appendonly yes
- 将文件挂载到容器中:
docker run -d \
--name redis \
-p 6379:6379 \
-v /path/to/redis.conf:/usr/local/etc/redis/redis.conf \
redis:latest \
redis-server /usr/local/etc/redis/redis.conf
这个方式,暂时没有成功
/path/to/redis.conf
是宿主机上的配置文件路径。redis-server /usr/local/etc/redis/redis.conf
命令指定 Redis 使用自定义配置文件。
(3)方式三,使用dockerfile构建镜像
通过自定义 Dockerfile
构建包含修改配置的 Redis 镜像。
- 创建dockerfile
FROM redis:latest
# 添加自定义配置文件
COPY redis.conf /usr/local/etc/redis/redis.conf
# 启动 Redis 并加载配置文件
CMD ["redis-server", "/usr/local/etc/redis/redis.conf"]
- 构建镜像
docker build -t custom-redis .
- 运行容器
docker run -d \
--name redis \
-p 6379:6379 \
custom-redis
(4)方式四,使用cli动态修改配置
在容器运行后,可以通过 redis-cli
动态修改配置。此方法修改的配置只在当前运行时有效。
- 设置密码
docker exec -it redis redis-cli
> CONFIG SET requirepass "yourpassword"
- 持久化到配置文件
> CONFIG REWRITE
4、验证redis是否启动成功
(1)查看容器状态
docker ps
确保输出中包含redis容器
(2)进入容器并使用redis cli
docker exec -it redis-6.2.0 redis-cli
执行后,可以在redis cli中输入命令,比如
ping
二、安装mysql
1、运行命令
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root_password \
-p 3306:3306 \
mysql:latest
2、持久化配置
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root_password \
-p 3306:3306 \
-v /path/to/mysql/data:/var/lib/mysql \
mysql:latest
/path/to/mysql/data
是主机上的数据存储路径。
(1)默认情况(没有指定数据存储路径)
如果没有指定数据存储路径,MySQL 会将数据保存在容器的内部文件系统中,通常是 /var/lib/mysql
。
在这种情况下,MySQL 会将数据存储在容器内的 /var/lib/mysql
目录中。这意味着:容器重启时,会丢失数据
(2)使用数据卷
为了持久化数据,推荐使用 Docker 数据卷。数据卷允许你将容器的数据存储在宿主机的指定位置,甚至在容器删除后,数据仍然保留。可以通过 -v
或 --mount
参数将容器的 /var/lib/mysql
目录挂载到宿主机目录或 Docker 数据卷。
3、导入数据库表和存储过程
如果你有一个 SQL 脚本(例如 import.sql
),可以通过以下命令将它导入到 MySQL 容器中。
docker exec -i mysql-container mysql -u root -p'root_password' < /path/to/import.sql
确保你的 import.sql
文件包含了所有需要的数据库表、存储过程、以及其他配置。
导入sql文件到指定数据库
docker exec -i mysql-container mysql -u root -p'root_password' database_name < /path/to/import.sql
如果没有数据库,可以先创建数据库
docker exec -i <container_name> mysql -u<username> -p<password> -e "create database <database>"
4、配置用户和密码
如果你需要在数据库中创建新用户,并授权,可以通过 MySQL 命令行执行以下 SQL 语句:
CREATE USER 'new_user'@'%' IDENTIFIED BY 'new_password';
GRANT ALL PRIVILEGES ON database_name.* TO 'new_user'@'%';
FLUSH PRIVILEGES;
或者,你也可以将这些语句写入一个 SQL 文件(如 setup_user.sql
),然后通过 docker exec
导入:
docker exec -i mysql-container mysql -u root -p'root_password' < /path/to/setup_user.sql
5、将当前容器保存为新的docker镜像
完成所有配置后,你可以将当前的容器保存为一个新的 Docker 镜像。首先,使用以下命令停止并提交容器:
docker commit mysql-container your_mysql_image_name:tag
例如,如果你希望新镜像的名称为 my_custom_mysql:1.0
,可以这样做:
docker commit mysql-container my_custom_mysql:1.0
这会将当前 MySQL 容器的状态保存为一个新的镜像。
docker commit mysql数据丢失
mysql数据库中的数据默认是存放在/var/lib/mysql目录下的,而mysql容器通常是将容器内的/var/lib/mysql作为volume挂载,当你使用commit命令把容器打包成镜像时,commit操作并不会包含容器内挂载的volume中的数据变化,所以会发现数据都不在了。
解决方法:
#在根目录下创建work目录
mkdir /work
#然后复制/var/lib/mysql下的数据到/work下
cp -r /var/lib/mysql /work
#修改数据库配置文件
vim /etc/mysql.conf.d/mysqld.cnf
#修改 [mysqld]下的datadir目录,将数据修改为刚才创建的目录
datadir = /work/mysql
(1)运行新的docker镜像
最后,使用新的镜像来启动一个新的容器:
docker run --name new-mysql-container -d my_custom_mysql:1.0
新的容器会使用你已经配置好的数据库、表、存储过程、用户名和密码。
(2)将镜像推送到docker hub或其他镜像仓库
如果你想将新镜像推送到 Docker Hub 或其他容器镜像仓库,可以使用以下命令:
docker login
docker tag my_custom_mysql:1.0 your_dockerhub_username/my_custom_mysql:1.0
docker push your_dockerhub_username/my_custom_mysql:1.0
这样,你就可以在其他机器上使用这个镜像,或者与他人共享。
三、安装zookeeper
1、运行命令
docker run -d \
--name zookeeper \
-p 2181:2181 \
zookeeper:latest
2、持久化配置
docker run -d \
--name zookeeper \
-p 2181:2181 \
-v /path/to/zookeeper/data:/data \
-v /path/to/zookeeper/datalog:/datalog \
zookeeper:latest
/path/to/zookeeper/data
是主机上的数据存储路径。/path/to/zookeeper/datalog
是数据日志存储路径。
四、安装minio
1、运行命令
docker pull minio/minio
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
quay.io/minio/minio server /data --console-address ":9001"
2、持久化配置
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
-v /path/to/minio/data:/data \
minio/minio server /data --console-address ":9001"
/path/to/minio/data
是主机上的数据存储路径。- 访问 MinIO 控制台:http://localhost:9001
五、安装vsftp
1、运行命令
docker pull fauria/vsftpd
docker run -d \
--name vsftp \
-p 21:21 \
-p 21000-21010:21000-21010 \
-v /path/to/vsftp:/home/vsftpd \
-e FTP_USER=user \
-e FTP_PASS=password \
fauria/vsftpd
/path/to/vsftp
是主机上的数据存储路径。FTP_USER
和FTP_PASS
设置 FTP 用户名和密码。- 被动模式: 确保防火墙允许 21 和 21000-21010 端口的访问。
如果拉取vsftpd时超时,可以配置自己的代理,例如创建一个简单的脚本docker-pull-proxy.sh
#!/bin/bash
HTTP_PROXY="http://proxy.example.com:8080" \
HTTPS_PROXY="http://proxy.example.com:8080" \
docker pull "$@"
然后执行
docker ./docker-pull-proxy.sh docker.io/fauria/vsftpd
2、自定义配置
如果需要修改 vsftpd.conf
配置文件,可通过挂载一个自定义配置文件:
# 编辑本地 vsftpd.conf
nano /home/ftpdata/vsftpd.conf
# 示例配置内容:
write_enable=YES
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
# 挂载自定义配置文件
docker run -d \
--name vsftpd \
-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-v /home/ftpdata:/home/vsftpd \
-v /path/to/vsftpd.conf:/etc/vsftpd/vsftpd.conf \
--restart=always \
fauria/vsftpd
3、使用host网络模式
如果你希望容器完全共享宿主机的网络栈(包括端口),可以使用 --network host
参数来指定容器使用宿主机的网络模式。
docker run --network host -d fauria/vsftpd
--network host
会让容器完全共享宿主机的网络,容器内的进程可以直接访问宿主机的网络,存在一定的安全风险。在生产环境中,通常建议使用端口映射(-p
)来保持一定的隔离。
六、docker compose
通过 Docker Compose 可以同时启动上述所有服务。以下是一个示例 docker-compose.yml
文件:
version: '3.8'
services:
redis:
image: redis:latest
container_name: redis
ports:
- "6379:6379"
volumes:
- ./redis/data:/data
command: redis-server --appendonly yes
mysql:
image: mysql:latest
container_name: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root_password
volumes:
- ./mysql/data:/var/lib/mysql
zookeeper:
image: zookeeper:latest
container_name: zookeeper
ports:
- "2181:2181"
volumes:
- ./zookeeper/data:/data
- ./zookeeper/datalog:/datalog
minio:
image: quay.io/minio/minio
container_name: minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
volumes:
- ./minio/data:/data
command: server /data --console-address ":9001"
vsftp:
image: fauria/vsftpd
container_name: vsftp
ports:
- "21:21"
- "21000-21010:21000-21010"
environment:
FTP_USER: user
FTP_PASS: password
volumes:
- ./vsftp:/home/vsftpd
启动服务
docker-compose up -d