docker-compose菜鸟日记

简书不支持markdown 可以去掘金看我原文

起源

docker教程满大街,为啥要再写?

- 看了别人的教程,还是不会

- 命令太多记不住

- 满大街的教程大同小异

- 我们要学会自己看官网

docker介绍

- 别人的教程写太多了 docker官网看看吧

docker安装、docker-compose安装

- 请选用docker-ce(社区版免费)

- 我们还是要学会看 英文官网 如何安装docker

> 如果安装的是mac版本无需再单独 安装docker-compose 其他版本请参考官网

- 最后,命令行 `docker-compose version` 一下

docker-compose部署

- 这里要接触到 docker 的 network 4个模式中的 `bridge` (默认)、`host`

> 注意事项:macos 10.15.x(也许macos上host模式都有问题)上`docker`的`host`模式有问题,我的`macos`上`host`模式无法访问,同样的配置放到 *linux云服务器* 是可以运行的

部署nginx

相关链接

1. docker-compose官网 compose-file

2. docker hub的 nginx

手把手一步步

1. 新建目录并命名、在新建目录下新建`docker-compose.yaml`,yml文件后缀也是可以的

2. 内容如下

```yaml

#

# https://docs.docker.com/compose/compose-file/

# 指定format的版本,我也不知道干啥的

version: "3.7"

# compose file的三大金刚(service、networks、volumes)之一,用来定义应用

services:

  # web这个是随便命名的

  web:

    # 指定nginx镜像

    image: nginx

    # 指定映射端口8088(前一个),到容器内80(后一个)

    ports:

      - 8088:80

```

3. 运行一发`docker-compose up`,如果需要后台运行只需要多加一个 `-d` 参数,我们也可以运行 `docker-compose run --help` 查看帮助


4. 现在可以访问 本地localhost:8088 看到nginx欢迎您说明好了


还有优化空间

1. 将容器内nginx配置拷贝出来放到本地,后面通过文件映射的方式让容器读取你指定的配置

2. 使用host模式绕过一层docker路由将容器内端口暴露(安全性又是个问题)

如何指定静态文件和配置映射

1. volumes 字段配置,我的是这样的:

```yaml

# https://docs.docker.com/compose/compose-file/

# 指定format的版本,我也不知道干啥的

version: "3.7"

# compose file的三大金刚(service、networks、volumes)之一,用来定义应用

services:

  # web这个是随便命名的

  web:

    # 指定nginx镜像

    image: nginx

    # 指定映射外部端口8088(前一个),到容器内80(后一个)

    ports:

      - 8088:80

    volumes:

      - ./html:/usr/share/nginx/html

      - ./nginx:/etc/nginx

```

2. 指定了当前目录下的html文件夹映射到`/usr/share/nginx/html`目录,nginx文件夹映射到`/etc/nginx`,要映射到哪怎么知道呢?当然是前面给出的docker hub的 nginx 里面找到的,当然,你要是对nginx配置熟悉的话另说

3. 在刚才的nginx容器里面拷贝出配置文件来

```shell

# 查看刚才启动的容器,复制容器id或者name(这里我们不一样)

docker container ls

# 复制容器内的静态文件到当前目录,用容器id

docker container cp bc1fbbe11a2b:/usr/share/nginx/html .

# 复制容器内的配置文件到当前目录,也可以用容器name

docker container cp docker_web_1:/etc/nginx .

```

4. `ctrl+c` 结束 `docker-compose up` 或者 `docker-compose down` 结束 `docker-compose up -d` (注意命令行窗口切换问题)

5. 再次启动容器`docker-compose up`我们就使用的自己的静态文件和nginx配置了


6. 从此以后再也不用担心容器重启配置文件无法保存的问题了

如何使用host模式

再加一句 `network_mode: host` 重启容器就好了

```yaml

# https://docs.docker.com/compose/compose-file/

# 指定format的版本,我也不知道干啥的

version: "3.7"

# compose file的三大金刚(service、networks、volumes)之一,用来定义应用

services:

  # web这个是随便命名的

  web:

    # 指定nginx镜像

    image: nginx

    volumes:

      - ./html:/usr/share/nginx/html

      - ./nginx:/etc/nginx

    # 指定映射端口8088(前一个),到容器内80(后一个)

    ports:

      - 8088:80

    network_mode: host

```

> 注意加上之后使用的host模式直接将容器内端口暴露在外面,所以上面的

```yaml

ports:

- 8088:80

```

> 将自动失效,而且前面还说了,macos中host模式无效的问题,需要在linux上操作一发,windows系统host模式我不知道行不行

线上部署问题

记得带上`-d`参数,阿里云之类的可能涉及到端口开放之类的问题,需要后台设置

部署mysql

```yaml

version: "3.7"

services:

# db我起的名字

  db:

  # 这里学到一个新知识,设置运行后容器的名字为“mydb”

    container_name: mydb

    image: mysql

    # 抄官网的

    command: --default-authentication-plugin=mysql_native_password

    restart: always

    # 环境变量

    environment:

    # 数据库root密码,这个镜像特殊的东西,镜像说明里面找的

      MYSQL_ROOT_PASSWORD: db_pwd.

    network_mode: host

    ports:

      - 3306:3306

    volumes:

      - ./conf.d:/etc/mysql/conf.d

      - ./mysql:/var/lib/mysql

```

手把手教学

1. docker hub mysql 链接

2. 按照之前的套路,参考官网说明->写yaml配置->复制容器内的文件到本地-> `volumes` 映射配置与数据存储

3. 启动容器

4. 可以用navicat 之类的连接数据库了,好像都不需要去设置什么允许远程连接

结语

- 欢迎各位的批评指导文中的疏漏之处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容