0
0

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 3 years have passed since last update.

EC2にdockerコンテナを立ち上げる(個人的備忘録)

Posted at

EC2にubuntuのインスタンスを作成し、キーペアを作る

インスタンス作成は割愛

-# キーペアの権限を変える
% chmod 400 キーペア.pem
-# ubuntuのインスタンスにssh接続する
% ssh -i キーペア.pem ubuntu@EC2のパブリックDNS
yes

キーペアの権限を変える目的は、間違って書き換えた場合、ssh接続できないので「400」と読み取り専用のキーペアとする。EC2のパブリックDNSはインスタンスを停止起動で変わるので注意!

EC2にdockerをインストール

-# アクセス権限がないので、sudoを使いupdateする。
$ sudo apt-get update
-# dockerのインストール
$ sudo apt-get install docker.io
-# Yを押す
-# dockerのバージョンの確認
$ docker -—version

このままだとubuntuはdockerに権限がないため、コマンドの頭に**「sudo」**を毎回つけなければならない。なので「docker」というグループを作り、「ubuntu」を入れる。すると「docker」グループに「ubuntu」は属しているため、dockerが使えるようになり、「sudo」なしにコマンドが使えるようになる。

-# 「docker」というグループに「ubuntu」をいれる 
$ sudo glassed -a ubuntu docker
Adding user ubuntu to group docker
-# 一度抜けないと反映されない
$ exit
-# ssh接続する
% ssh -i キーペア.pem ubuntu@EC2のパブリックDNS
-# dockerコマンドの確認
$ docker images

dockerコマンドが使えることが確認できる。

Docker imageをtarに圧縮してEC2に送る

-# EC2に送るDocker imageの作成
% mkdir temp_folder
% cd temp_folder
% vim Dockerfile
Dockerfile
FROM alpine
RUN touch test
% docker build .

軽量のalpineを作成し、そこに「test」というファイルを作成する。

tarファイルに変換

-# docker save イメージ名 > 新しい名前.tar
% docker save b3fc1a6f13e6 > myimage.tar
-# tarファイルの確認
% ls

SFTPを使ってEC2にアクセスする。

ファイルを転送する時に使うコマンド。

-# sftpに入る(ホストとインスタンスが接続している状態)
% sftp -I キーペア.pem ubuntu@EC2のパブリックDNS
-# put 送るファイルのパス 送り先のファイルパス
sftp> put temp_folder /home/ubuntu 
-# 別のターミナルを開き、キーペアがあるディレクトリに移動し、ssh接続する。
% ssh -i mydocker.pem ubuntu@ec2-18-183-94-137.ap-northeast-1.compute.amazonaws.com
-# ファイルがあるか確認
$ ls

ファイルがホストからEC2に転送されていることが確認できる。

EC2からホストへファイルを転送する

-# EC2にファイルの作成
$ touch test
-# 別のターミナルを開き、ホスト側へ移動、sftpに入る
% sftp -I キーペア.pem ubuntu@EC2のパブリックDNS
-# testファイルがあることを確認する
sftp> ls
-# testファイルを取得する
sftp> get test
-# sftpを抜ける
sftp> exit

デスクトップに「test」ファイルがあることを確認する

tatファイルをdockerimageに戻す

# ssh接続する
% ssh -i キーペア.pem ubuntu@EC2のパブリックDNS
# docker load < tarファリルでimageに戻す
$ docker load < my image.tar
# imageの確認
$ docker images
# docker run(alpineはbashがないのでsh)
$ docker run -it イメージID sh
# lsコマンドでtestファイルがあることを確認
ls

DockerfileをEC2に直接送り立ち上げる。

-# sftpに入る
% sftp -I キーペア.pem ubuntu@EC2のパブリックDNS
-# putでDockerfileを送る、送り先を指定しない場合はubuntuのホームディレクトリにputされる
% put Dockerfileの絶対パス
-# ssh接続する
% ssh -i mydocker.pem ubuntu@ec2-18-183-94-137.ap-northeast-1.compute.amazonaws.com
-# Dockerfileの確認
$ ls
-# ビルドコンテキストの作成
$ mkdir dsenv_build
-# Dockerfileの移動
$ mv Dockerfile dsenv_build/
$ cd dsenv_build
-# コンテナを立ち上げる
$ docker build .

しかし、**ストレージ(8GB)**が足りずビルドすることができない。

コンピュータのディスク要領の確認

# -hでM,Gバイト表示になる
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            476M     0  476M   0% /dev
tmpfs            98M  768K   98M   1% /run
/dev/xvda1      7.7G  5.1G  2.7G  66% /
tmpfs           490M     0  490M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           490M     0  490M   0% /sys/fs/cgroup
/dev/loop0       97M   97M     0 100% /snap/core/9804
/dev/loop1       29M   29M     0 100% /snap/amazon-ssm-agent/2012
tmpfs            98M     0   98M   0% /run/user/1000

8GBで「/」はすでに5.1G使っており、残りは2.7GBしかなくbuildする際に、ストレージが足りずにBuildできない。ちなみにLinuxの場合、Dockerオブジェクトの保存場所は「/var/lib/docker/」にある。

EC2のストレージを変更する。

1.EC2のインスタンスのページで「Elastic Block Store」のボリュームをクリックする。
2.任意のインスタンスにチェックし、「アクション」でボリュームの変更を行う。
3.サイズで20GBと設定する。
4.画面を更新し、サイズが20GBになっていることを確認する。
5.インスタンスに反映されていない可能性があるので、インスタンスを再起動しておく。

再度buildする。

-# ssh接続
% ssh -i mydocker.pem ubuntu@ec2-18-183-94-137.ap-northeast-1.compute.amazonaws.com
-# Dockerfileの場所まで移動する
$ cd dsenv_build
-# 再度build
$ docker build .
-# ストレージが20GBになったので、異常なくbuildできる。
$ docker run -v~:/work -p 8888:8888 イメージID

EC2のパブリックDNS:8888で接続できることが確認できる。

コンテナのアクセス権限

-# $ sudo adduser —uid 任意のID ユーザー名(ユーザーはsudo権限がないと作成できないので注意)
-# いろいろ聞かれるが今回は全てエンターで省略
$ sudo adduser --uid 1111 aaa
-# /home/aaaというディレクトリが作成されているので移動
$ cd /home/aaa
-# もう1人のユーザー作成
$ sudo adduser --uid 2222 bbb
-# ホームディレクトリに戻る
$ cd /home
-# ファイルの権限を確認する。
$ ls -la
-# aaaとbbbのファイルの権限が確認でき、aaaはbbbのディレクトリに書き込みができないことが確認できる。
-# aaaのユーザーで入る
docker run -u 1111 -v /home/aaa:/home/aaa -v /home/bbb:/home/bbb -it ubuntu bash
-# idの確認
1111
aaaのユーザーで入っていることが確認できる。
-# bbbディレクトリに移動
$ cd /home/bbb
-# ファイルを作成
$ touch test

しかし書き込み権限がないため、作成できないことが確認できる。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?