Docker简单实例

Docker

  1. 下载相关的镜像

    $ docker pull <image-name>
    
  2. 制定需要的镜像

    $ touch Dockerfile
    $ vi Dockerfile
    FROM <image-name>
    
    WORKDIR /wo/
    
    COPY ./ /wo/
    
    ENTRYPOINT <command>
    
    RUN <command>
    
  3. 建立自定义的镜像

    $ docker build . -t <demo:tag>
    
  4. 新建docker-compose.yml文件

    $ vi docker-compose.yml
    version: "3.0"
    
    services:
        demo:
            image: demo:tag
            container_name: demov1
            ports:
                - "8088:8000"
                - "本地端口:容器内端口"
            environment:
                - ...
            networks:
                - demo_net
            links:
                - other_demo
            depends_on:
                - other_demo
            command: ...
            restart: always
    
  5. 启动docker-compose.yml

    $ docker-compose up -d
    $ docker-compose down # 删除对应的容器
    
  6. 在yml文件中 command 测试后存在只能运行部分命令

    $ docker-compose run demo <command>
    # docker-compose run demo ./manage.py migrate
    $ docker-compose exec demo <command>
    # docker-compose exec demo uwsgi --ini uwsgi.ini
    

注意:

  • 容器一直处于restarting状态
    command: tail -f /dev/null
    
  • mysql 镜像注意点-制定镜像时候,需要修改数据库权限;否则容器间无法访问
    ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql'; 
    FLUSH PRIVILEGES; 
    
  • 启动容器文件存在command无法运行多条命令的问题
    1. command 直接运行多条
      command: bash -c " && "
      # 个人在使用期间,遇到无法执行或者只执行某条(原因并未知道,期待讨论)
      
    2. docker-compose 命令运行多条
      $ docker-compose run <service-name> <command>
      $ docker-compose exec <service-name> <command>
      # 其中的具体区别可以查看官方文档哦
      
  • windows 和 Mac / Linux 之间有差别
    1. command: bash -c ""中bash不是内部命令
      1. 查看镜像是否是 alpine 
      2. 尝试 /bin/bash  /bin/sh sh 
      3. 尝试更换原镜像
      4. 利用启动文件 eg. < /entrypoint.sh mysqld >
      
    2. 必须存在启动命令: 添加command

你可能感兴趣的:(Docker,docker-compose,部署)