1. 程式人生 > >利用Dockerfile建立映象並生成容器

利用Dockerfile建立映象並生成容器

  1. 建立Dockerfile(以mysql 5.7為例)
    可以從Docker Hub上下載官方Dockerfile,以及docker-entrypoint.sh
    具體內容太長,還是在Docker Hub上看的吧
  2. 建立映象
    進入到Dockerfile目錄,執行下面的命令:
    docker build -t mysql .
    注意後面的的點,表示在當前目錄。
    建立完之後,就可以通過docker images,看到剛建立的映象了。
    這裡寫圖片描述
    這裡可以看到生成了兩個映象,一個是mysql的,一個是基礎映象:debian,
  3. 生成容器
    docker run --name mymysql -d mysql:latest \
    > -p 3306:3306 -v $PWD/conf/my.cnf:/etc/mysql/my.cnf -v $PWD/logs:/logs -v $PWD/data:/mysql_data \
    > -e MYSQL_ROOT_PASSWORD=123456

    再通過docker ps,就可以看到剛剛生成的容器:
    這裡寫圖片描述
    引數說明:
    -p 3306:3306:將容器的3306埠對映到主機的3306埠。
    -v $PWD/conf/my.cnf:/etc/mysql/my.cnf:將主機當前目錄下的 conf/my.cnf掛載到容器
    -v $PWD/logs:/logs:將主機當前目錄下的logs目錄掛載到容器的/logs
    -v $PWD/data:/mysql_data:將主機當前目錄下的data目錄掛載到容器的/mysql_data
    -e MYSQL_ROOT_PASSWORD=123456:初始化root使用者的密碼
  4. 進入容器
    執行命令docker exec -it mymysql /bin/bash
    進入容器。
    顯示的主機名即為容器ID:
    這裡寫圖片描述
    docker exec引數說明:
    -d :分離模式: 在後臺執行
    -i :即使沒有附加也保持STDIN 開啟 (小白不懂啥意思,貌似就是可互動的意思)
    -t :分配一個偽終端(tty)
  5. 期間遇到的問題
    生成容器的過程中總是報RPC錯誤
    docker: Error response from daemon: rpc error: code = 2 desc = "oci runtime error: could not synchronise with container process: not a directory".
    我網上查了一下,說是32位系統不相容的問題,但是我裝的是64位系統。我看是目錄問題,就把docker run的-p引數去掉執行,還是報錯,不過變成了docker: Error response from daemon: Container command 'docker-entrypoint.sh' not found or does not exist..
    ,找不到docker-entrypoint.sh檔案,網上查也沒有找到答案。折騰了好久,才發現我的docker-entrypoint.sh沒有可執行許可權,於是,就chmod -x docker-entrypoint.sh,可是不知道為啥docker-entrypoint.sh還是不可執行,就直接執行了 chmod 777 docker-entrypoint.sh,終於可以了。