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 "<command> && <other-command>"
      # 個人在使用期間,遇到無法執行或者只執行某條(原因並未知道,期待討論)
      
    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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章