はじめてのDocker

 

Docker 開発環境

参考

C++初心者がDockerで開発環境をつくってみた - Qiita

https://hogehuga.net/linux/264/

主題:開発環境の作成
目標規定文:この文章では「Dockerを用いた,C++コードの記述・ビルド・デバックの一貫した操作が可能な環境を構築し利用する方法」を示す.
構成法:作成の時系列に沿って記述
  1. 前準備,設定ファイルなど

    1. $ ls
      Dockerfile       data-structure     docker-compose.yml

      $ cat Dockerfile
      FROM ubuntu:18.04

      RUN apt-get update && \
        apt-get install -y git build-essential cmake clang libssl-dev gdb vim

      $ cat docker-compose.yml
      version: '3.3'
      services:
      dev:
        build: .
        volumes:
          #hostのsrcとguest(docker)のdst共有
          - type: bind 
            source: ./data-structure/    
            target: /home/data-structure/
          # ファイルの共有もできる
          - ~/.vimrc:/root/.vimrc
        # 開始ディレクト
        working_dir: /home/data-structure/
  2. コンテナの作成

    docker-compose build

  3. コンテナの起動・停止・再開

    1. docker-compose run --name "geeks" dev bash
    2. exit
    3. docker start -i geeks
  4. コンテナの削除

    # 最新のコンテナ以外全部削除 ``とxargsは同じ働き
    docker ps -a -q | grep -v `docker ps -l -q` | xargs docker rm

    #$()によるコマンド展開
    $ sudo docker rm $(sudo docker ps -aq)
    # タグなしのイメージをすべて削除するhttps://qiita.com/curseoff/items/a9e64ad01d673abb6866
    docker rmi $(docker images | grep '<none>' | awk '{print$3}')

    c.f. シェル芸
    https://qiita.com/kiida/items/3beb1bf718cdc2f0798a
    https://qiita.com/Ping/items/57fd75465dfada76e633
  5. その他,諸注意

    1. Dockerではrunとstartというコマンドがあり、runは「イメージからコンテナを作成」、startは「コンテナを起動」となります。

       私がファイルが消えていると勘違いしていたのは、実はdocker runをしていたため、毎回イメージからコンテナが作成されていたのでした。だからdocker ps -aとかすると一回だけしかログインしてないようなコンテナがいっぱいありました。つらい…

      https://www.scriptlife.jp/contents/programming/2016/07/14/post-1628/

    2. alias ds="cd ~/workspace/geeksforgeeks && docker start -i geeks" で起動させると便利

    3. detach-key問題->config.jsonの設定またはdocker runの際に --detach-keyオプション追加 https://qiita.com/Yuki-Inoue/items/60ec916383025160fbb8