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
 
 
ver-cloudimg-amd64-vagrant-disk1.box
==> vagrant: A new version of Vagrant is available: 2.2.7 (installed version: 2.2.4)!
 
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'trusty64' (v0) for provider:
    box: Progress: 100% (Rate: 296k/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'trusty64' (v0) for 'virtualbox'!
 
 
$vagrant init
 
viしてIP編集
$vi .\Vagrantfile
 
 
 
以下のサイトから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
 
※回答
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の選択
    
    
    $vagrant init ubuntu/xenial64
 
    vagrantfileの修正を行う.
    $vi vagarntfile
    config.vm.box = "trusty64"となっているので、以下のように書き換える
    
        Vagrant.configure("2") do |config|
              config.vm.box = "ubuntu/xenial64"
        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
 
 
$ 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のままでした。。。
なぜ...
vagrant@vagrant-ubuntu-trusty-64:~$ sudo 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
vagrant@vagrant-ubuntu-trusty-64:~$
 
 
 
-----------------
trial 3
-----------------
 
Boxのインストール
 
 
Box add 以下のキャプチャにあるように設定を行う。
(ここは本当に苦労したので、キャプチャを載せます。。。、
最初からdocker入りのxenialなんてあったのか......という感じですが.....)
 
 

f:id:Appkun:20200222182714p:plain

vagrantbox.esでxenialをADDする
 
Box初期化
$ vagrant init envimation/ubuntu-xenial-docker
 
Box起動.
$ vagrant up
 
$ vagrant init ssh
 
元々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
centos                             The official build of CentOS.                   5831                [OK]
ansible/centos7-ansible            Ansible on Centos7                              128                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   109                                     [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   69
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]
tutum/centos                       Simple CentOS docker image with SSH access      45
centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   40
centos/httpd-24-centos7            Platform for running Apache httpd 2.4 or bui…   30
kinogmt/centos-ssh                 CentOS with SSH                                 29                                      [OK]
guyton/centos6                     From official centos6 container with full up…   10                                      [OK]
pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   10
drecom/centos-ruby                 centos ruby                                     6                                       [OK]
centos/tools                       Docker image that has systems administration…   5                                       [OK]
mamohr/centos-java                 Oracle Java 8 Docker image based on Centos 7    3                                       [OK]
darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK]
pivotaldata/centos                 Base centos, freshened up a little with a Do…   3
pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   2
miko2u/centos6                     CentOS6 日本語環境                                   2                                       [OK]
pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   2
indigo/centos-maven                Vanilla CentOS 7 with Oracle Java Developmen…   1                                       [OK]
blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK]
pivotaldata/centos7-dev            CentosOS 7 image for GPDB development           0
smartentry/centos                  centos with smartentry                          0                                       [OK]
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 run centos echo "it is executed at centos"
 
実行中のプロセス表示
$ 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
 
 
-------------------------
コンテナのイメージを作る.
-------------------------
 
コンテナの中に入って作業(コンテナの中でターミナルを立ち上げる)
$ sudo docker run -i -t centos /bin/bash
 
適当に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
ef430092b060        centos              "/bin/bash"         About a minute ago   Exited (0) 15 seconds ago                        elated_wright
 
 
$ 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 add-apt-repository ppa:jonathonf/vim コマンドによって、PPAのvimリポジトリをこのUbuntuに認識させる
 
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>
RUN yum install -y httpd
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 .
 
vagrant@base-debootstrap:~$ sudo docker push {user名}/httpd
 
 
すると...
pushに成功した。
 
dockerの方でpush出来ているか確認する.
結果、問題なし。
 
ちなみに
docker pull {user名}/httpd
を実施してみた。
 
 
$ docker pull {user名}/httpd


docker pullも無事に成功しました。
 
以上dockerに関するあれこれでした。