Docker – 在容器中搭建运行FTP服务器(vsftpd)

2019-06-04发布:hangge阅读:2396

使用 Docker 搭建 FTP 服务,不仅十分简单,而且可以对宿主机有一定的隔离。下面以 CentOS 系统为例,演示如何通过容器运行 FTP 服务。

1,拉取镜像

首先执行如下命令将镜像下载到本地:

docker pull fauria/vsftpd

2,启动容器

执行如下命令实例化 ftp 服务:

参数说明:

  • /home/ftp:/home/vsftpd:映射 docker 容器 ftp 文件根目录(冒号前面是宿主机的目录)
  • -p:映射 docker 端口(冒号前面是宿主机的端口)
  • -e FTP_USER=test -e FTP_PASS=test :设置默认的用户名密码(都为 test
  • PASV_ADDRESS:宿主机 ip,当需要使用被动模式时必须设置。
  • PASV_MIN_PORT~ PASV_MAX_PORT:给客服端提供下载服务随机端口号范围,默认 21100-21110,与前面的 docker 端口映射设置成一样。
docker run -d -v /home/ftp:/home/vsftpd \``-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \``-e FTP_USER=test -e FTP_PASS=test \``-e PASV_ADDRESS=192.168.60.128 \``-e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \``--name vsftpd --restart=always fauria/vsftpd

3,防火墙配置

如果 CentOS 服务器有防火墙,为了让客户端能够访问 ftp 服务。我们可以关闭防火墙,或者执行如下命令配置 firewall 防火墙策略:

firewall-cmd --permanent --add-port=20/tcp``firewall-cmd --permanent --add-port=21/tcp``firewall-cmd --permanent --add-port=21100/tcp``firewall-cmd --permanent --add-port=21101/tcp``firewall-cmd --permanent --add-port=21102/tcp``firewall-cmd --permanent --add-port=21103/tcp``firewall-cmd --permanent --add-port=21104/tcp``firewall-cmd --permanent --add-port=21105/tcp``firewall-cmd --permanent --add-port=21106/tcp``firewall-cmd --permanent --add-port=21107/tcp``firewall-cmd --permanent --add-port=21108/tcp``firewall-cmd --permanent --add-port=21109/tcp``firewall-cmd --permanent --add-port=21110/tcp``firewall-cmd --reload

4,新建用户文件夹

(1)首先执行如下命令进入到容器里面:

docker ``exec` `-i -t vsftpd bash

(2)由于前面我们启动的时候设置用户名为 test,已经自动创建对应的用户文件夹(所以下面这个文件夹无需我们再次手动创建):

mkdir` `/home/vsftpd/test

(3)为方便演示,在 test 用户文件夹下新建一个 1.txt 文件。

vi /home/vsftpd/test/1.txt

5,访问服务

(1)我们可以直接使用浏览器进行访问,地址如下:

原文:Docker - 在容器中搭建运行FTP服务器(vsftpd)

(2)也可以使用 ftp 客户端工具进行访问。

原文:Docker - 在容器中搭建运行FTP服务器(vsftpd)

(3)如果是 Mac 电脑,我们还可以通过“访达”->“前往”->“**连接服务器...**”来访问 ftp 服务。

原文:Docker - 在容器中搭建运行FTP服务器(vsftpd)

附:增加一个新用户

前面我们在启动服务的时候就创建了个默认用户 test。如果需要新增一个新用户,假设用户名:hangge,密码:123456,具体操作如下。

(1)首先执行如下命令进入到容器里面:

docker ``exec` `-i -t vsftpd bash

(2)创建新用户的文件夹:

mkdir` `/home/vsftpd/hangge

(3)编辑用户配置文件:

vi /etc/vsftpd/virtual_users.txt

(4)在文件中添加新用户的用户名和密码:

原文:Docker - 在容器中搭建运行FTP服务器(vsftpd)

(5)保存退出后执行如下命令,把登录的验证信息写入数据库。

/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db

(6)最后退出容器,并重启容器可以使用新用户连接 FTP 服务了。

exit``docker restart vsftpd

原文出自:www.hangge.com 转载请保留原文链接:https://www.hangge.com/blog/cache/detail_2449.html

使用Docker安装ownCloud

目录

可以使用Docker 和官方的ownCloud Docker映像来安装 ownCloud。该官方映像旨在与主机文件系统中的数据量以及单独的MariaDBRedis容器一起使用。配置:

  • 公开端口8080,允许HTTP连接。
  • 在主机上安装数据和MySQL数据目录以进行持久存储。

在本地计算机上安装

要使用它,首先创建一个新的项目目录,然后docker-compose.ymlownCloud Docker GitHub存储库下载 到该新目录。接下来,创建一个.env配置文件,其中包含必需的配置设置。仅需要一些设置,这些设置是:

| 设定名称 | 描述 | 例 |
| :----------------- | :--------------- | :---------- |
| OWNCLOUD_VERSION | ownCloud版本 | latest |
| OWNCLOUD_DOMAIN | ownCloud域 | localhost |
| ADMIN_USERNAME | 管理员用户名 | admin |
| ADMIN_PASSWORD | 管理员用户的密码 | admin |
| HTTP_PORT | 要绑定的HTTP端口 | 8080 |

然后,您可以使用首选的Docker命令行工具启动容器。以下示例显示了如何使用 Docker Compose

# Create a new project directory
mkdir owncloud-docker-server

cd owncloud-docker-server

# Copy docker-compose.yml from the GitHub repository
wget https://raw.githubusercontent.com/owncloud/docs/master/modules/admin_manual/examples/installation/docker/docker-compose.yml

# Create the environment configuration file
cat << EOF > .env
OWNCLOUD_VERSION=10.3
OWNCLOUD_DOMAIN=localhost
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin
HTTP_PORT=8080
EOF

# Build and start the container
docker-compose up -d

该过程完成后,请通过运行来检查所有容器是否已成功启动docker-compose ps。如果它们都正常工作,那么您应该期望看到类似于以下内容的输出:

Name                Command                       State             Ports
__________________________________________________________________________________________
server_db_1         /usr/bin/entrypoint/bin/s …   Up                3306/tcp
server_owncloud_1   /usr/local/bin/entrypoint …   Up                0.0.0.0:8080->8080/tcp
server_redis_1      /bin/s6-svscan /etc/s6        Up                6379/tcp

在其中,您可以看到数据库,ownCloud和Redis容器正在运行,并且ownCloud可通过主机上的端口8080访问。

| | 仅因为所有容器都在运行,ownCloud才能正常运行需要几分钟。如果您运行 docker-compose logs --follow owncloud并看到大量信息记录到控制台,请等待直到其速度变慢以尝试访问Web UI。 |
| ---- | ------------------------------------------------------------ |
| | |

在登录

要登录ownCloud UI,请http://localhost:8080在您选择的浏览器中打开,在其中您会看到标准的ownCloud登录屏幕,如下图所示。

通过Docker的ownCloud UI

用户名和密码是您之前存储的管理员用户名和密码.env

停止容器

如上例所示,假设您使用了docker-compose来停止容器的使用docker-compose stop。或者,用于 docker-compose down停止和删除容器以及相关的网络,映像和卷。

在Docker上升级ownCloud

当新版本的ownCloud发布时,您应该更新实例。为此,请按照以下简单步骤操作。

首先,转到您的.yamlor .env文件所在的docker目录。其次,将ownCloud置于维护模式;您可以使用以下命令进行操作:

docker-compose exec owncloud occ maintenance:mode --on

第三,使用以下命令创建备份,以防万一在升级过程中出现问题:

docker-compose exec db backup

| | 假定您正在使用 Webhippie的默认数据库容器。 |
| ---- | ------------------------------------------------------------ |
| | |

第五,关闭容器。

docker-compose down

第六,更新.env文件或YAML文件中的ownCloud的版本号。可以使用sed,如以下示例所示。

# Make sure that you adjust the example to match your installation.
sed -i 's/^OWNCLOUD_VERSION=.*$/OWNCLOUD_VERSION=<newVersion>/' /compose/*/.env

第七,查看文件以确保已执行更改。

cat .env

第八,再次启动您的docker实例。

docker-compose up -d

现在您应该使用docker-compose运行当前的ownCloud。请注意,该容器将occ upgrade在启动时自动运行。如果您发现容器一遍又一遍地启动,则可以使用以下命令检查更新日志:

docker-compose logs --timestamp owncloud

Docker撰写YAML文件

| | 如果您是企业客户,并且已经在portal.owncloud.com上注册,请替换image: owncloud/serverimage: registry.owncloud.com/owncloud/enterprise,以便能够下载我们的企业docker映像。然后,通过运行docker login registry.owncloud.com和您的门户网站凭据登录到我们的注册表。 |
| ---- | ------------------------------------------------------------ |
| | |

version: '2.1'

volumes:
  files:
    driver: local
  mysql:
    driver: local
  backup:
    driver: local
  redis:
    driver: local

services:
  owncloud:
    image: owncloud/server:${OWNCLOUD_VERSION}
    restart: always
    ports:
      - ${HTTP_PORT}:8080
    depends_on:
      - db
      - redis
    environment:
      - OWNCLOUD_DOMAIN=${OWNCLOUD_DOMAIN}
      - OWNCLOUD_DB_TYPE=mysql
      - OWNCLOUD_DB_NAME=owncloud
      - OWNCLOUD_DB_USERNAME=owncloud
      - OWNCLOUD_DB_PASSWORD=owncloud
      - OWNCLOUD_DB_HOST=db
      - OWNCLOUD_ADMIN_USERNAME=${ADMIN_USERNAME}
      - OWNCLOUD_ADMIN_PASSWORD=${ADMIN_PASSWORD}
      - OWNCLOUD_MYSQL_UTF8MB4=true
      - OWNCLOUD_REDIS_ENABLED=true
      - OWNCLOUD_REDIS_HOST=redis
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - files:/mnt/data

  db:
    image: webhippie/mariadb:latest
    restart: always
    environment:
      - MARIADB_ROOT_PASSWORD=owncloud
      - MARIADB_USERNAME=owncloud
      - MARIADB_PASSWORD=owncloud
      - MARIADB_DATABASE=owncloud
      - MARIADB_MAX_ALLOWED_PACKET=128M
      - MARIADB_INNODB_LOG_FILE_SIZE=64M
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - mysql:/var/lib/mysql
      - backup:/var/lib/backup

  redis:
    image: webhippie/redis:latest
    restart: always
    environment:
      - REDIS_DATABASES=1
    healthcheck:
      test: ["CMD", "/usr/bin/healthcheck"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - redis:/var/lib/redis

故障排除

如果登录注册表时遇到问题,请确保该.docker文件位于主目录中。如果您通过安装了Docker snap,请使用以下命令创建指向您的主目录的符号链接:

ln -sf snap/docker/384/.docker

版本384可能与您的版本不同。请相应地进行调整。

https://doc.owncloud.com/server/10.3/admin_manual/installation/docker/

Docker下的mysql

1、启动容器:

docker run --name mysql -p 3306:3306 -v /www/docker/mysql/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=youpassword -d mysql:latest --default-authentication-plugin=mysql_native_password

--default-authentication-plugin=mysql_native_password
解决:Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib/x86_64-linux-gnu/mariadb18/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

2、设置远程访问

刚起的mysql容器不具备远程连接的功能,需要我们进入容器中进行设置,首先我们先进入启动的mysql容器:

docker exec -it mysql bash

这时你会进入容器的终端界面,启动mysql的连接命令即可:

mysql -uroot -p

这里的-p的值就是上面你创建容器时设置的环境变量MYSQL_ROOT_PASSWORD的值。由于我这里不想root对外,所以创建了一个用于开发使用的用户(这里把localhost改为%就能远程访问啦):

create user '用户名称'@'%' identified by '密码';
flush privileges;  --立即启用修改

然后测试一下:

mysql -h [localhost] -u[usrname] -p

3、用户管理

限制用户登录,制定权限,略....

4、数据库管理

添加数据库 略.....

分类: MySQL | 留下评论