linux ubuntu-xenial-docker上のdockerを使用してdockerコマンドの練習
以下ではvagrant上にubuntu-xenial-dockerのboxを導入(dockerはインストール済み)したうえで、dockerのコマンドを試したり、docker index上にpushするところまでやってみましたのでシェア。
また、トラブルシューティングも出来る限り載せるようにしています
というか、
dockerの導入から早速つまずきました。
trial1~3を実施、3回目でようやくdocker環境が導入できました。(以下)
------------------------
Trial 1
------------------------
★trusty64をインストール
既にdockerがインストールされている場合は削除を行う.
sudo apt-get remove docker docker-engine docker.io containerd runc
$vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-ser
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'trusty64' (v0) for provider:
box: Downloading: https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
box: Progress: 100% (Rate: 296k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'trusty64' (v0) for 'virtualbox'!
$vagrant init
viしてIP編集
$vi .\Vagrantfile
$vagrant up
以下のサイトからdockerをインストールする.
▽SET UP THE REPOSITORY
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ sudo add-apt-repository \
$(lsb_release -cs) \
stable"
▽INSTALL DOCKER ENGINE - COMMUNITY
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io]]
$ apt-cache madison docker-ce
$ sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
$ sudo docker run hello-world
◆Trouble fix
※現象
root@myhost:/home/admin# apt-get install docker-ce docker-ce-cli containerd.io
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package docker-ce-cli
※回答
Jessie is no longer supported; see https://docs.docker.com/install/linux/docker-ce/debian/
But you should still be able to install Docker 18.06 (docker-ce package); be aware though that Docker 18.06 reached EOL, so won't receive future updates.
I'll close this ticket because it's not a big, but feel free to continue the conversation
...jessieは対応していないことが判明.
------------------------
Trial 2
------------------------
★vagrant上に入れるBoxの選択.
1,dockerをインストール可能なubuntuのversion:
To install Docker Engine - Community, you need the 64-bit version of one of these Ubuntu versions:
Eoan 19.10
Bionic 18.04 (LTS)
Xenial 16.04 (LTS)
※参考
2.boxの選択
vagrantfileの修正を行う.
$vi vagarntfile
config.vm.box = "trusty64"となっているので、以下のように書き換える
Vagrant.configure("2") do |config|
end
private.networkのIP設定も変更する.
vagrantを起動していたら閉じる.
$vagrant suspend
$vagrant up
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
Key fingerprint = 56F7 650A 24C9 E9EC F87C 4D8D 4067 E403 13CB 4B13
$ sudo add-apt-repository \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
また、以下のエラー..ってよく見たらまだubuntu_trusty-64のままでした。。。
なぜ...
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package docker-ce-cli
-----------------
trial 3
-----------------
Boxのインストール
Box add 以下のキャプチャにあるように設定を行う。
(ここは本当に苦労したので、キャプチャを載せます。。。、
最初からdocker入りのxenialなんてあったのか......という感じですが.....)
$ vagrant box add envimation/ubuntu-xenial-docker https://atlas.hashicorp.com/envimation/boxes/ubuntu-xenial-docker
Box初期化
Box起動.
$ vagrant up
元々dockerがインストール済みの環境であることを確認する.
$ docker -v
------------------------------------
使ってないVagrant Boxを削除する編.
------------------------------------
削除したいboxの名前を確認する.
vagrant box list
削除
vagrant box remove trusty64
削除されていることを確認する.
vagrant box list
----------------------------------
※実際にdockerを使っていく編.
----------------------------------
以下のコマンドで検索可能.
$ sudo docker search centos | more
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ansible/centos7-ansible Ansible on Centos7 128 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 58 [OK]
guyton/centos6 From official centos6 container with full up… 10 [OK]
centos/tools Docker image that has systems administration… 5 [OK]
miko2u/centos6 CentOS6 日本語環境 2 [OK]
pivotaldata/centos7-dev CentosOS 7 image for GPDB development 0
pivotaldata/centos6.8-dev CentosOS 6.8 image for GPDB development 0
CentOS をpullする.
$ sudo docker pull centos
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 5 weeks ago 237MB
vagrant@base-debootstrap:~$ docker inspect 470
imageの情報をCheckする.idは470671670cacなので、470で一意に指定出来ればいい
$ sudo docker inspect 470
docker imageの削除方法.
$ sudo docker rmi 470
--------------
コンテナ操作
--------------
コンテナ上でのコマンド実行.s
実行中のプロセス表示
$ sudo docker ps
実行中のプロセス表示(実行を終了したものも含む)
$ sudo docker ps -a
実行中のプロセス表示(実行を終了したものも含む, 最新3つ)
$ sudo docker ps -a -n=3
--------------------
実行中の履歴を削除
--------------------
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc1dfcf94752 centos "echo 'it is execute…" 44 seconds ago Exited (0) 43 seconds ago gracious_leakey
containerIDがdc..なので、dcとする
$ sudo docker rm dc
削除されていることを確認する
$ sudo docker ps -a
------------------------------------------
一回で実行しないようなコンテナタスクを生成
------------------------------------------
コンテナ実行
-d :バックグランド
free : centos上で走らせたいコマンド(メモリの参照)
-s 5: 5秒後ごとに実行.
sudo docker run -d centos free -s 5
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
457d2819da92 centos "free -s 5" 9 seconds ago Up 8 seconds eager_newton
コンテナ処理のログを見る.
$ sudo docker logs 457
タスクをbackground処理でなく前面に持ってくる.
$ docker attach --sig-proxy=false 457
ctrl+c で抜ける。
タスクを止める、もしくは終了する
$ sudo docker stop 457
$ sudo docker kill 457
-------------------------
コンテナのイメージを作る.
-------------------------
コンテナの中に入って作業(コンテナの中でターミナルを立ち上げる)
適当にhomeは以下にtext.txtを作成する
[root@ef430092b060 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@ef430092b060 /]# cd home/
[root@ef430092b060 home]# ls
[root@ef430092b060 home]# touch test.txt
[root@ef430092b060 home]# cd ..
[root@ef430092b060 /]# exit
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ sudo docker commit ef43 vag/test
sha256:c50242bbc6e9e51ad643a265d65aed82b12abbdf24597e4ace8fe9a4aadc6978
★コミットデータを元にコンテナを作成する。
$ sudo docker run -i -t vag/test /bin/bash
test.txtがhome配下に作られているか確認。
$ sudo docker run -i -t vag/test /bin/bash
[root@18ddc564ff2c /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@18ddc564ff2c /]# cd home/
[root@18ddc564ff2c home]# ls
test.txt
[root@18ddc564ff2c home]# exit
------------------------------
自動化する。(docker build)
-----------------------------
ssh接続後の直下にDockerfileを作成する
$ touch Dockerfile
$ vi Dockerfile
======================================================================
最新のvimのインストール
以下の3つのコマンドをさえすればOK 参考:http://tipsonubuntu.com/2016/09/13/vim-8-0-released-install-ubuntu-16-04/
sudo add-apt-repository ppa:jonathonf/vim
sudo apt update
sudo apt install vim
上のコマンドの意味
add-apt-repository
UbuntuではPPA(Personal Package Archives)というUbuntu非公式のソフトウェアを管理しているアーカイブをPPAというらしい 参考:https://allabout.co.jp/gm/gc/438675/
sudo apt update
パッケージの一覧を更新 リポジトリ追加・削除時には必ず実行するべきコマンド
sudo apt install vim
これで最新のvimをインストールすることができる
======================================================================
$ vim Dockerfile
FROM centos
MAINTAINER Gen Vag <vag@vag.com>
# RUN: buildするときに実行される
RUN echo "bulidExecute!"
# CMD: runする時に実行
CMD ["echo", "RunExecute!"]
ビルド実行(Dockerfileはカレントディレクトリにあるので最後にピリオドつける(名前はvag/buildにしておく)
$ sudo docker build -t vag/build .
<結果>
Sending build context to Docker daemon 59.51MB
Step 1/4 : FROM centos
---> 470671670cac
Step 2/4 : MAINTAINER Gen Vag <vag@vag.com>
---> Running in 9308dfa39ae9
Removing intermediate container 9308dfa39ae9
---> 5770592d9cf2
Step 3/4 : RUN echo "bulidExecute!"
---> Running in 035792e89d69
bulidExecute!
Removing intermediate container 035792e89d69
---> 344f2605ff57
Step 4/4 : CMD ["echo", "RunExecute!"]
---> Running in c94a3acbff6f
Removing intermediate container c94a3acbff6f
---> 190399259770
Successfully built 190399259770
Successfully tagged vag/build:latest
imageに登録されているか確認
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vag/build latest 190399259770 2 minutes ago 237MB
vag/test latest c50242bbc6e9 39 minutes ago 237MB
centos latest 470671670cac 5 weeks ago 237MB
vag/buildを実行する
$ sudo docker run vag/build
RunExecute!
--------------------------------------
buildの時にhttpdサーバを立ち上げる
DockerFile内に記述してbuildする
--------------------------------------
$ vim Dockerfile
FROM centos
MAINTAINER Gen Vag <vag@vag.com>
ADD ./index.html /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
$ touch index.html
$ ls
Dockerfile index.html VBoxGuestAdditions.iso
$ vim index.html
<html>
hello
</html>
ビルドを実行
$ sudo docker build -t vag/httpd .
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
vag/httpd latest d3df00c3096f About a minute ago 283MB
vag/build latest 190399259770 16 minutes ago 237MB
vag/test latest c50242bbc6e9 About an hour ago 237MB
centos latest 470671670cac 5 weeks ago 237MB
httpdをインストールするときに80にしたので8080を80にリダイレクトしておく
$ sudo docker run -p 8080:80 -d vag/httpd
192.168.33.11:8080 にアクセスする
index.htmlが表示される.
-----------------------------------
出来たimageをDocker indexにpushする
-----------------------------------
$ sudo docker login
$ sudo docker push vag/httpd
The push refers to repository [docker.io/vag/httpd]
62e5f754a6c0: Preparing
41fd1e2ab93f: Preparing
0683de282177: Preparing
denied: requested access to the resource is denied
pushが拒否された...
原因はvagではだめでimageは=「user名/image名」というformatにする必要があった。
$ sudo docker build -t {user名}/httpd .
すると...
pushに成功した。
dockerの方でpush出来ているか確認する.
結果、問題なし。
ちなみに
docker pull {user名}/httpd
を実施してみた。
docker pullも無事に成功しました。
以上dockerに関するあれこれでした。