上一篇安装好了 Docker,现在直接用 docker-compose 来搭建环境了。
docker-compose 的配置就是通过名字为 docker-compose.yml 的文本文件,在目录里面建立个 名字为 “docker-compose.yml” 的文件,然后用命令:docker-compose up
,就可以启动容器运行环境了。关掉容器用 docker-compose stop
,删除用 docker-compose rm
, 不过一般都不用删除。除非自己搞坏容器了才会删除,重新启动一下就重建了。
建立了配置文件就往里面填充内容了。建立之前还是推荐浏览一下 Docker 官方的配置文件说明文档,只不过是英文的。可以结合翻译工具来阅读。
简单来说就分为几个部分:文档版本声明、服务配置、端口映射和目录映射、服务配置 这几个部分。不过可以直接自己构建 docker 镜像。虽然现在很多人都按自己习惯来的 docker 镜像越来越多了,但是还是建议直接使用官方通过的 docker 镜像好了,这样方便的和安全的多。至少那些给黑客留好的后门不是在 docker镜像里面。
这里我直接给个完整的 docker-compose.yml 的内容作为例子好了。
version: '3.1' services: wordpress: image: wordpress:5.0.3-php7.3-apache restart: always ports: - 80:80 volumes: - ./wordpress:/var/www/html:rw environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_NAME: 数据库名称 WORDPRESS_DB_USER: 数据库用户名 WORDPRESS_DB_PASSWORD: 数据库密码 WORDPRESS_TABLE_PREFIX: 表头 db: image: mysql:8.0 restart: always ports: - '3306:3306' volumes: - ./data:/var/lib/mysql environment: MYSQL_DATABASE: 数据库名称 MYSQL_USER: 数据库用户名 MYSQL_PASSWORD: 数据库密码 MYSQL_ROOT_PASSWORD: 数据库的ROOT密码
这个例子可以看出 yml 的结构是这样的:
version: 版本 services: 服务 容器1: 容器1的配置 容器2: 容器2端配置
然后我来说几个要注意的地方
1.version: 指是这个 yml 文件的版本,有的 linux 发行版的 docker-compose 需要改成 2.0 才能执行。比如腾讯云的某些版本。这个和 docker-ce 的版本有关系的。如果你用新版的docker 的话 还是 3.0 以上吧。
2. 每行的缩进必须用空格。不能用 tab 键,否则不能执行。
3. ports: 是对外映射的端口。因为 docker 每个容器运行的时候都在docker 建立的专用内网里面。所以需要端口映射后,才能访问。
4. volumes: 是本地文件的挂载位置。类似 linux 的 mount 命令。让容器可以访问本地文件用的。
缩进的空格可以按自己习惯2个或者4个,都可以。如果不想暴露端口可以不映射出来。让其直接内部访问更安全。不过这得直都是默认端口号才行。头几天测试的时候用了别人所谓的 mysql优化版的 docker 镜像,结果那人编译的时候按他的习惯把端口改了。我以为出问题了。后来查了一下才发现的。坑人啊。
上面例子的 db 容器,如果mysql 不需要 远程访问管理这些,可以直接删掉端口那段,这样隐藏了。外边扫描的时候就只看到一个公开的 80端口了。和直接安装 apache 或nginx 的服务器来说相对安全很多。不过如果你服务器的 root 密码泄露出去了那就什么都不安全了。哈哈。如果要再安全点。那就为 docker 配置个专用的运行账号,而不是默认的 root 用户和权限。
配置好了后,在docker-compose.yml 所在目录里面建立用来保存 WordPress 程序的 wordpress 目录,一个用来保存数据库的 data 目录。当然也不用按我这个例子的名字来。第一次启动的时候 docker-compose 会判断是否有这个两个目录的。
特注意的一点就是用 docker-compose up -d 或者 docker-compose up 启动了后,就不能随意编辑 docker-compose.yml 了。否则会造成 docker 出现一些无非停止的损坏的容器。这样就需要这两个命令来关闭全部运行的docker 容器了。
所以你需要记住下面这几个命令:
$ docker ps // 查看所有正在运行容器 $ docker stop containerId // containerId 是容器的ID $ docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID $ docker stop $(docker ps -a -q) // stop停止所有容器 $ docker rm $(docker ps -a -q) // remove删除所有容器
好了。docker 的东西基本差不多了。也许下次继续这个话题了。