Docker使用6-Multi container apps

写在前面

主题是Multi container apps,这里是链接。本文主要学习使用容器与其他容器的关联。

Container networking

当你的程序需要用到另一个程序怎么办,例如app需要用到mysql。容器内的一切都是单独的,与其他容器不关联,那要怎么与其他容器通信呢,答案是networking。

创建mysql容器

  1. 创建network
    docker network create todo-app
    
  2. 启动mysql容器。-v是设置volume,volume名为todo-mysql-data,映射到容器的路径为/var/lib/mysql ,若不存在则自动创建-e是设置mysql的环境遍历。
    docker run -d \
        --network todo-app --network-alias mysql \
        -v todo-mysql-data:/var/lib/mysql \
        -e MYSQL_ROOT_PASSWORD=secret \
        -e MYSQL_DATABASE=todos \
        mysql:8.0
    
  3. 访问mysql容器,执行SHOW DATABASES;,可以看见自动创建了todos数据库。退出交换可输入exit
    docker exec -it <mysql-container-id> mysql -u root -p
    
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | todos              |
    +--------------------+
    5 rows in set (0.00 sec)
    

将应用连接到mysql

  1. 运行一个 nicolaka/netshoot image的容器,指定相同的网络
    docker run -it --network todo-app nicolaka/netshoot
    
  2. 在该容器内,使用dig命令寻找mysql的信息
    dig mysql
    
    ; <<>> DiG 9.18.8 <<>> mysql
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32162
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;mysql.				IN	A
    
    ;; ANSWER SECTION:
    mysql.			600	IN	A	172.23.0.2
    
    ;; Query time: 0 msec
    ;; SERVER: 127.0.0.11#53(127.0.0.11)
    ;; WHEN: Tue Oct 01 23:47:24 UTC 2019
    ;; MSG SIZE  rcvd: 44
    
    ANSWER SECTION172.23.0.2就是mysql的ip

将app连接到mysql

将之前的app(todo app)项目 的数据存到mysql。

  1. 进入之前的app项目路径并启动容器。-w指定容器内的路径,-v将当前路径映射到容器内的路径/app--network指定网络,
    -e指定环境变量
    docker run -dp 127.0.0.1:3000:3000 \
      -w /app -v "$(pwd):/app" \
      --network todo-app \
      -e MYSQL_HOST=mysql \
      -e MYSQL_USER=root \
      -e MYSQL_PASSWORD=secret \
      -e MYSQL_DB=todos \
      node:18-alpine \
      sh -c "yarn install && yarn run dev"
    
  2. 访问http://localhost:3000,添加几个Item
  3. 连接mysql容器,查看添加的数据
    docker exec -it <mysql-container-id> mysql -p todos
    
    会看到类似如下的数据
    mysql> select * from todo_items;
    +--------------------------------------+--------------------+-----------+
    | id                                   | name               | completed |
    +--------------------------------------+--------------------+-----------+
    | c906ff08-60e6-44e6-8f49-ed56a0853e85 | Do amazing things! |         0 |
    | 2912a79e-8486-4bc3-a4c5-460793a575ab | Be awesome!        |         0 |
    +--------------------------------------+--------------------+-----------+
    

你可能感兴趣的:(docker,容器)