3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Docker】コンテナをイメージにして配布する

Posted at

はじめに

本記事では、コンテナからイメージを生成する方法についてまとめます。

コンテナの作成

今回は簡単なコンテナとして、c++のhello worldプログラムを使います。
ディレクトリ構成は以下のようにします。

docker-cpp/
 ├ src/
  ├ CMakeLsits.txt
  └ main.py
 ├ docker-compose.yml
 └ Dockerfile

各ファイルの内容は以下のようになります。

Dockerfile
FROM ubuntu:18.04

RUN apt-get update && apt-get -y upgrade && \
    apt-get install -y sudo && \
    apt-get install -y build-essential && \
    apt-get install -y vim && \
    apt-get install -y wget && \
    apt-get install -y unzip && \
    apt-get install -y git && \
    apt-get install -y libssl-dev

# コンパイラーのインストール
RUN apt-get install -y gcc && \
    apt-get install -y g++

# コンパイラーのパスをセット
ENV CC=/usr/bin/gcc \
    CXX=/usr/bin/g++

# CMakeインストール
RUN cd $HOME && \
    wget https://github.com/Kitware/CMake/releases/download/v3.17.1/cmake-3.17.1.tar.gz && \
    tar zxvf cmake-3.17.1.tar.gz && \
    cd cmake-3.17.1/ && \
    ./bootstrap && \
    make -j12 && sudo make install -j8
RUN echo 'export PATH=$HOME/cmake-3.17.1/bin/:$PATH' >> ~/.bashrc && \
    . ~/.bashrc

RUN apt-get install -y libopenblas-dev && \
    apt-get install -y liblapack-dev

# ライブラリインストール用ディレクトリ
WORKDIR $HOME/usr/
RUN mkdir ./library

CMD bash
docker-compose.yml
version: '3'

services:
  cmake:
    container_name: cmake_container
    build:
      context: .
      dockerfile: Dockerfile

    tty: true
    command: /bin/bash

    volumes:
      - ./src:/usr/src
CMakeLists.txt
project("testDockerCpp")

cmake_minimum_required(VERSION 2.8)

add_executable(test main.cpp)
main.cpp
#include <iostream>
#include <string>

int main(void){
    std::cout << "Hello World!" << std::endl;
    return 0;
}

コンテナの作成

上記のファイルが準備できたら、コンテナを作成していきます。以下のコマンドでDockerfileをビルドし、コンテナを作成します。

docker compose up -d

コンテナが起動できたら、以下のコマンドでコンテナ内に入ります。

docker exec -it cmake_container bash

コンテナ内に入ったら以下のコマンドでビルド、実行をするとHello World!と出力されます。

cd /usr/src/
mkdir build
cd build
cmake .. & make -j4
./test

このあとこのコンテナをイメージ化するのですが、このままイメージ化しても意味がないので(コンテナ作成時に作られているので)、少しいじってみます。今回は、ソースコードを消して実行ファイルのみにしてみます。

cd /usr/src
rm main.py CMakeLists.txt

コンテナをイメージ化

いよいよコンテナをイメージ化していきます。イメージ化する前にコンテナは以下のコマンドで停止しておいてください。

exit
docker stop cmake_container

以下のコマンドを実行することで、コンテナをイメージ化することができます。
docker commit コンテナ名 イメージ名

docker commit cmake_container helloworld

ここで、イメージ名はアルファベット小文字のみでないとエラーになります。

以下のコマンドで、今作成したイメージからコンテナを作ってみます。

docker run -itd --name helloworld_container helloworld

コンテナ内に入って、./testを実行するとHello World!と表示されます。

docker exec -it helloworld_container bash
cd /usr/src/build
./test 

最後に

なんで、c++を例に使ったんだろう。Dockerfileのビルドめちゃくちゃ時間かかります。ごめんなさい。作成ずみのコンテナ使うと、さくっと試せると思います。(そもそも配布イメージ使えばよかった)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?