Ubuntuでdocker pullからdocker runまで

### Dockerの概要
– 軽量な仮想化環境作成のツール
– コンテナを用いてアプリケーションをすばやく構築、テスト、デプロイできるソフトウェアプラットフォーム
– ubuntu上で開発されている
https://www.docker.com/

### Ubuntu/trusty64の用意
$ vagrant init ubuntu/trusty64

config.vm.network "private_network", ip: "192.168.33.10"

$ vagrant up
$ vagrant status
$ vagrant ssh

### Dockerインストール
公式ドキュメント: linux ubuntu install
1. Update the apt package index:
$ sudo apt-get update

2. Install packages to allow apt to use a repository over HTTPS:
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

3. Add Docker’s official GPG key:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

4. Use the following command to set up the stable repository. To add the nightly or test repository, add the word nightly or test (or both) after the word stable in the commands below.
$ sudo add-apt-repository \
“deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable”

INSTALL DOCKER ENGINE – COMMUNITY
1. Update the apt package index.
$ sudo apt-get update

2. Install the latest version of Docker Engine – Community and containerd, or go to the next step to install a specific version:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

3. List the versions available in your repo:
$ apt-cache madison docker-ce

4. Install a specific version using the version string from the second column
$ sudo apt-get install docker-ce=18.06.3~ce~3-0~ubuntu

### 確認
$ sudo docker –version
Docker version 18.06.3-ce, build d7080c1

docker pullしてdocker runするとimageが実行される

### dockerの操作
// imageの取得
$ sudo docker pull centos
// image一覧表示
$ sudo docker images
// imageの詳細表示
$ sudo docker inspect 470671

// dockerの実行
$ sudo docker run 47067 echo “hello world”
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused “process_linux.go:297: copying bootstrap data to pipe caused \”write init-p: broken pipe\””: unknown.

kernelが古い
https://github.com/docker/for-linux/issues/591
kernel >= 3.17

// kernelを4.4にバージョンアップする
$ sudo apt-get install –install-recommends linux-generic-lts-xenial
// reboot
$ sudo reboot

再度dockerを実行
vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker run 47067 echo “hello world”
hello world

$ sudo docker ps -a -n=5

Amazon Elastic Container Service(ECS)って何?

何やらECSを知ってないと駄目らしい。
ECSって何?英会話教室? あ、それECCね。

ECSはAmazon Elastic Container Serviceの略。
クラスターでDockerコンテナを簡単に実行、停止、管理できるコンテナ管理サービス。
あれ、Dockerのデプロイならk8sじゃなかったっけ??

まず公式から。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html

ロードバランサのポートマッピングやコンテナの生死監視、自動復旧などをやってくれるのね。

やってるのは、ecs-agentというのをコンテナとして起動して、confにcluster名を渡してあげているだけとのこと。

autoscaling groupを使ってインスタンスを立てて、その起動スクリプトでacs-agentを動かす。

ecsのクラスターの作成

まあ、dockerでサービスやるなら、ってところか。

docker redmineのデータを永続化させる

コンテナの/usr/src/redmine/files等のアップロードされるデータをホストマシンのディレクトリにマッピングします。
データベースを別コンテナのものを使用します。別コンテナではデータベースの格納先をホストマシンにマッピングします。
MySQLかPostgreSQLを使った場合、Redmineのコンテナはデータベースの初期化を待ちません。Redmineのコンテナにrestart: alwaysを使っても、タイミングによっては再起動されなくなります。Redmineのコンテナでデータベースのクライアントのmysqladminコマンドやpsqlコマンドがインストールされておらず、healthcheckも利用できません。RedmineのDockerfileでmysqladminコマンドとpsqlコマンドをインストールし、docker-entrypoint.shでデータベースにアクセスできるようになったかを見るべきです。

docker ps -q -l | xargs docker stop | xargs docker rm

docker ps – コンテナの一覧
docker logs – コンテナの標準出力を表示
docker stop – 稼働しているコンテナの停止

dockerでredmineを入れる

データの永続性がないRedmineを動かす
sudo docker run -d –name redmine -p 80:3000 redmine:latest

-アップロードしたファイルはredmineのファイルシステムに保存されます。
-データベースはredmineコンテナのSQLiteが使われます。
-コンテナを削除するとredmineのデータは削除されます。

docker入れるのに時間かかるなーこれ

だいぶ時間がかかったが、
vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker run -d –name redmine -p 80:3000 redmine:latest
Unable to find image ‘redmine:latest’ locally
latest: Pulling from library/redmine
05d1a5232b46: Pull complete
3f4b62449fc8: Pull complete
0a8ae4c4adc5: Pull complete
12f17b4afaac: Pull complete
bd96a6b3c421: Pull complete
2077365091d8: Pull complete
92dd687079de: Pull complete
a8580aed7235: Pull complete
29dd091771dc: Pull complete
35c7cf740aac: Pull complete
06e39eb42c60: Pull complete
e9c2babb9eb2: Pull complete
Digest: sha256:deedc4ec97c280fe9474166e948c1b259cc81999114ceac1b8e58e66c14ce349
Status: Downloaded newer image for redmine:latest
cbb455552207035a5dc34c4637c9deaafefc12da85567b908a3706bd7e0a10d1

うわ、これは凄い。

データの永続性のあるredmineにしないと意味がないか。
システム管理者の承認待ちになるな。

あれ?というか、他のツールも、installして環境つくれなかった場合は、dockerで動かせばいいのでは。。

CodeIgniter

PHPを用いて動的Webサイトを構築するために利用するオープンソースのWebアプリケーションフレームワーク

コード量が少ない(どこでどんな処理をしているのかの見通しもいい)
動作が速い(これまた、レイヤーの薄さがあっての効果です)

稼働中のコンテナに入る
docker-compose exec hoge_app bash

stop
docker-compose stop

docker-compose rm -v
docker-compose build –no-cache
docker rm ‘docker ps -a -q’

docker volume rm $(docker volume ls -qf dangling=true)

docker images -a

docker rmi ‘docker images -aq’
docker rmi -f ‘docker images -aq’

docker image prune

docker rmi $(docker images | awk ‘/^/ {print $3}’)

docker cp file.rc continername:/host/dir/

docker cp continer_name:/var/www/html/ /User/meta/hoge

docker composeのインストール

vagrant@vagrant-ubuntu-trusty-64:~/wordpress/dataonly$ sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 617 0 617 0 0 374 0 –:–:– 0:00:01 –:–:– 374
100 8648k 100 8648k 0 0 205k 0 0:00:42 0:00:42 –:–:– 303k
vagrant@vagrant-ubuntu-trusty-64:~/wordpress/dataonly$ sudo chmod +x /usr/local/bin/docker-compose

vagrant@vagrant-ubuntu-trusty-64:~/wordpress/dataonly$ sudo docker-compose ps
Name Command State Ports
————————————————————————————
dataonly_dbserver_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
dataonly_webserver_1 docker-entrypoint.sh apach … Exit 1

Docker compose とは、複数のコンテナから成るサービスを構築・実行する手順を自動的にし、管理を容易にする機能

dockerとは

Dockerは軽量な仮想マシンを簡単に構築することができ、インフラを含めたアプリ全体をまるまる、コンテナという箱に閉じ込めることができる

– OS依存がなく、導入が容易
– 案件ごとに異なる環境を構築できるため、特定のPC依存を回避
– ミドルウェア導入や新インフラ環境のテストが各自のPCで可能
– 言語やツールのバージョンアップテストが容易
– チームメンバー全員が各自のPCでデバッグ可能になる

vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker info
Containers: 10
Running: 3
Paused: 0
Stopped: 7
Images: 9
Server Version: 18.06.1-ce
Storage Driver: devicemapper
Pool Name: docker-8:1-263323-pool
Pool Blocksize: 65.54kB
Base Device Size: 10.74GB
Backing Filesystem: ext4
Udev Sync Supported: true
Data file: /dev/loop0
Metadata file: /dev/loop1
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 690.4MB
Data Space Total: 107.4GB
Data Space Available: 39.73GB
Metadata Space Used: 1.466MB
Metadata Space Total: 2.147GB
Metadata Space Available: 2.146GB
Thin Pool Minimum Free Space: 10.74GB
Deferred Removal Enabled: false
Deferred Deletion Enabled: false
Deferred Deleted Device Count: 0
Library Version: 1.02.77 (2012-10-15)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
apparmor
Kernel Version: 3.13.0-100-generic
Operating System: Ubuntu 14.04.5 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 489.9MiB
Name: vagrant-ubuntu-trusty-64
ID: CLZ5:A6GJ:OEWU:E76Y:ZUKL:LGLE:UOUK:I4FC:6TWQ:OHYZ:FJTK:F3CG
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: ddddocker
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

docker basic

vagrant@vagrant-ubuntu-trusty-64:~$ docker attach –sig-proxy=false 345
WARNING: Error loading config file: /home/vagrant/.docker/config.json: stat /home/vagrant/.docker/config.json: permission denied
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.38/containers/345/json: dial unix /var/run/docker.sock: connect: permission denied
vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker attach –sig-proxy=false 345

total used free shared buff/cache available
Mem: 501708 164064 44344 428 293300 316495
Swap: 0 0 0

total used free shared buff/cache available
Mem: 501708 164064 44344 428 293300 316499
Swap: 0 0 0

コンテナの中に入る
vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker run -i -t centos /bin/bash
[root@8f60db713564 /]#

Docker Hubにsign upしよう

あれ、昔アカウントを作っていたみたいだ。全く覚えていない。

vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker push hpscript/httpd
The push refers to repository [docker.io/hpscript/httpd]
a722e4d2fe46: Preparing
fa760d3a1093: Preparing
1d31b5806ba4: Preparing
denied: requested access to the resource is denied

ん?
docker tag firstimage YOUR_DOCKERHUB_NAME/firstimage

なるほど。リポジトリ名がddddockerでないと駄目なのね。
あ~ 頭痛くなってきた。

Dockerfileを使おう

vi Dockerfile

From centos
MAINTAINER Tetsu <hogehoge@gmail.com>
# Run: execute in build
RUN echo "now building..."
# CMD: execute in run
CMD ["echo", "now running..."]

vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker build -t shibuya/echo .
Sending build context to Docker daemon 13.31kB
Step 1/4 : From centos
—> 5182e96772bf
Step 2/4 : MAINTAINER Tetsu
—> Running in 48a636f08d6c
Removing intermediate container 48a636f08d6c
—> a532962fac42
Step 3/4 : RUN echo “now building…”
—> Running in 266d3e002a78
now building…
Removing intermediate container 266d3e002a78
—> 42e0d4397d0a
Step 4/4 : CMD [“echo”, “now running…”]
—> Running in 66419b3311b9
Removing intermediate container 66419b3311b9
—> b503e170fb73
Successfully built b503e170fb73
Successfully tagged shibuya/echo:latest

なんじゃこりゃーーーーーーーー

vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
shibuya/echo latest b503e170fb73 46 seconds ago 200MB
ab93f4f1679d 15 minutes ago 200MB
hello-world latest 4ab4c602aa5e 2 days ago 1.84kB
centos latest 5182e96772bf 4 weeks ago 200MB
vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker run b503
now running…

vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker build -t hpscript/httpd .
vagrant@vagrant-ubuntu-trusty-64:~$ sudo docker run -p 8080:80 -d hpscript/httpd
32e7d390b05826510945df2468a3e98a5762586080ec508ac3543a068ec3390f

わかったような解らんような分からんw