docker-ce版

3日続けての連続投稿です。
書かないと全く書かないけど、書くときは集中的に!

タイトルの通りですが、前回までの記事でdockerはcentosリポジトリにあるものをインストールしましたが、dockerのリポジトリからCE版をインストールする方がいいと思います。

インストール方法とかは既にいろんなところで記載があるので自分向けのメモとしてひたすらコマンドを列挙しておきます。


sudo yum -y install yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum -y install docker-ce

これだけです。

dockerイメージの作成、起動、停止、削除

前回VagrantでCentOS7を起動してDockerをインストールするところまで記載しました。

今回はDockerにイメージをインストールしてイメージの起動停止削除手順をメモしておきます。

dockerの起動をOS起動と同時に起動できるるように下記のコマンドを実行。


sudo systemctl start docker
sudo systemctl enable docker

vagrantでCentOS7を展開した場合デフォルトユーザはvagrantなので当該ユーザをdockerグループに追加後にexitしてvagrant sshで再接続します。


sudo groupadd docker
sudo usermod -aG docker $USER
exit
vagrant ssh

Dockerイメージのインストール

とりあえずCentOS7にCentOS7とUbuntuのイメージをインストールします。


docker pull centos:centos7
docker pull ubuntu:latest
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest 113a43faa138 3 weeks ago 81.2 MB
docker.io/centos centos7 49f7960eb7e4 3 weeks ago 200 MB

Dockerイメージを起動

centos7とubuntuのコンテナイメージの生成と起動します。バックグラウンドで起動させたいので-dオプションを指定し、--nameオプションで名前も指定しておきます。--nameオプションを指定することでコンテナ生成時に振られるIDや名前ではなくこちらで指定した名称でコンテナを操作できるようになるのでオプションは指定しておいた方がいいと思います。
当該オプションを指定しなくても生成後にdocker ps -aコマンドで自動的に付与された名前やIDを確認することはできます。


docker run -it -d --name centos7 centos:centos7
docker run -it -d --name ubuntu ubuntu:latest
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ecce9962bc3 ubuntu:latest "/bin/bash" 6 seconds ago Up 6 seconds ubuntu
77a854e88812 centos:centos7 "/bin/bash" 8 seconds ago Up 8 seconds centos7

接続

まずはCentOS7に接続します。


docker exec -it centos7 /bin/bash
[root@77a854e88812 /]#

exitで切断して、次はubuntuに接続します。


docker exec -it ubuntu /bin/bash
root@8ecce9962bc3:/#

exitで抜けます。

停止

コンテナ停止コマンドでcentos7とubuntuを停止させます。最後にdocker psコマンドで何も出力されていなければ停止完了です。


docker stop centos7
docker stop ubuntu
docker ps

再開

停止したdockerイメージを再開するにはdocker startコマンドで実施します。


docker start centos7
docker exec -it centos7 /bin/bash
[root@77a854e88812 /]#

終了したい場合はexitコマンドで抜けてください。

イメージ削除

作成済みのdockerコンテナイメージを削除する場合はdocker rmコマンドで行います。イメージ生成時に--nameオプションでコンテナ名を指定して構築していればrmの後にコンテナ名を指定すれば削除することができます。
centos7を削除するコマンドは下記の通り。


docker rm centos7

VagrantでCentOS7を起動してDockerをインストールするまで

今更ながらVagrantの設定からCentOS7にDockerをインストールするまでの手順をメモとして書いておきます。

VagrantVirtualboxは既にインストール済みであることが前提です。

とりあえずVagrantのbox配置先フォルダを変更したい場合、環境変数VAGRANT_HOMEにパスを設定してから作業。

では、コマンドプロンプトを起動してcentos7をインストールしてみます。


vagrant box add centos/7

下記のような選択肢が出たら今回は3のvirtualboxを選択します。


1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

終わったらlistコマンドで確認。


vagrant box list

登録されていたらとりあえず作業ディレクトリを作成してディレクトリ配下で下記コマンドよりVagrantfileを生成します。


vagrant init centos/7

あとはvagrant upコマンドでOSを起動して、sshで接続できればOK。


vagrant up
vagrant ssh
Vagrantファイルを編集した時、文字コードをMS932で保存してvagrant upとかすると起動時にUTF-8への変換エラーとかが出ることがあるので、その場合はVagrantファイルをUTF-8形式に保存しなおして実行すれば大丈夫です。
その時、Vagrantfileに下記おまじないも追加してUTF-8形式で保存しておくとよいです。


# -*- encoding: utf-8 -*-

続いてDockerをインストールします。vagrant sshで接続してyumでDockerをインストール。


yum -y install docker

とりあえずここまでにしておきます。
dockerにイメージをインストールする部分は別の機会に。

まだまだ他にも記録しておきたいことがあるんだけど全然追いつかない。。。

rbenvを使ってrubyとserverspecをインストール

serverspecというrubyでできている基盤テストツールを試したくなったのでとりあえずCentOS7にrubyをインストールしました。
その時のメモです。

まずはyumで必要なものを一式インストール。すでにインストール済みのものがあれば外してください。


yum -y install git
yum install -y openssl-devel readline-devel zlib-devel
yum -y groupinstall "Development Tools"

rbenvとruby-buildのインストール。


git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
mkdir -p ~/.rbenv/plugins
source ~/.bash_profile
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build


最後に最新版のrubyをインストールしてbundlerとserverspecをインストール。


rbenv install 2.5.1
rbenv rehash
rbenv global 2.5.1
ruby -v

rbenv exec gem install bundler
rbenv rehash

bundle init
vi Gemfile
gem "serverspec"
gem "winrm" #windows

bundle
rbenv rehash

rbenvやruby-buildは公式サイトにある手順をほとんどそのまま実施すれば問題ないと思います。

serverspecは多分これで動くはず。


mkdir any_directory
cd any_directory
serverspec-init

ここまではうまくいきました。そのうち動作検証結果もUPしたいと思います。

CentOS7にhyper-vのドライバを組み込んでみる

1年以上更新していませんでした。

そしてブログのタイトル変更しました。

少し昔のネタです。

 

別の仮想環境からHyper-v仮想マシンを移行して、うまく起動しないときは、レスキューモードで起動して以下のコマンドでドライバ追加とinitramfsまで再構築するといいかもしれません。

 

cd /boot

dracut -f --add-drivers "hv_vmbus hv_storvsc hv_netvsc hv_utils hv_balloon hyperv-keyboard hyperv_fb hid-hyperv"

mkinitrd -f -v --with=hid-hyperv --with=hv_utils --with=hv_vmbus --with=hv_storvsc --with=hv_netvsc ./initramfs-3.x.x.img 3.x.x



initramfsはOS起動時にメモリ上に展開されるミニルートファイルシステムのようなものです。

initramfs-の後のバージョン番号は利用するカーネルのバージョン番号とそろえておく必要があります。もちろん作業前に/boot配下のオリジナルinitramfsはコピーバックアップを取ること推奨です。

Python備忘録(1)

久々にPythonを利用したら日付操作関係ほとんど覚えてなくてやりたいことができずショックだったので再勉強もかねて備忘録。
それ以外にもファイル操作やいろいろ忘れすぎているのでそのうちそれらも備忘録に残します。今回はとりあえず日付とコマンドライン引数関係とrange。

  • 備忘録1

コマンドライン引数で開始、終了日を受け取って終了日から開始日までカウントダウン

# -*- coding: utf-8 -*-

import sys

args = sys.argv

argc = len(args)

if argc != 3:
    print("Usage: >python test.py start_date end_date")
    print("        The formats of both star and end date are YYYYMMDD")
    exit(1)

start_date = args[1]
end_date = args[2]

days = (int(end_date, 10) - int(start_date, 10)) + 1
print("How many days:", days)
for i in range(int(end_date, 10), int(start_date, 10) - 1, -1):
    print(i)

実行結果


test.py 20170301 20170310
('How many days:', 10)
20170310
20170309
20170308
20170307
20170306
20170305
20170304
20170303
20170302
20170301

  • 備忘録2

日付関連の操作もろもろ

# -*- coding: utf-8 -*-

from datetime import datetime, date, time, timedelta

strdate = "20170321"
strtime = "03:10:30"

aday = datetime.strptime(strdate + " " + strtime, '%Y%m%d %H:%M:%S')
print(aday)

#一日後
next_day = aday + timedelta(days=1)
print(next_day)

#一分後
before_one_minute = aday + timedelta(minutes = 1)
print(before_one_minute)

#時刻だけ抽出
only_time = before_one_minute.strftime('%H:%M:%S')
print(only_time)

#文字列型で2日先
str_next_days = "2017-03-22 " + only_time
print(str_next_days)

実行結果


2017-03-21 03:10:30
2017-03-22 03:10:30
2017-03-21 03:11:30
03:11:30
2017-03-22 03:11:30

ansibleのroleのサンプルを公開

自宅の開発環境がいつ壊れても復旧できるようにAnsibleでroleやらplaybookやらを作っていたのですが、自宅のSVNで管理していても結局SVNサーバが壊れたら終わりなのでroleのサンプルをGithubで公開しました。

https://github.com/you-t/ansible-role-samples

ライセンスはMITです。

まあ、サンプルなんで利用は自己責任で。。。暇のある時にロールの追加をしていきたいと思います。