20190227のdockerに関する記事は7件です。

プラグインインストール済のJenkins 構築 Docker編 その1

モチベーション

パッとローカルのwin10 PCによく使うPlugin入りのJenkinsを構築したい。
みんなで使うJenkinsさんはあるんだけど、ちょっと周りに迷惑かけずに試したいことがある時に、その時だけ使ってあとは捨てる前提。
手段は大きく分けると2つ。
1.Docker Image作っておいて、必要な時だけコンテナ起動
2.Ansibleなどの構成管理ツールで、自動で構築
机上で考えても両者の優越つけられなかったので、両方やってみましょう。
今回は1.のDocker編です。

環境や前提条件

windows10 pro 1803
PowerShell
Docker 18.09.0

まず素のJenkinsを動かしてみよう

Dockerfileの準備

dockerfile
FROM jenkins:2.19.4
#COPY plugins.txt /usr/share/jenkins/ref/
#RUN /usr/local/bin/install-plugins.sh $(cat /usr/share/jenkins/ref/plugins.txt)

Dockerfileからdocker imageを作成

powershell
# cd C:\docker\jenkins
# docker build -t myjenkins:1 .
# docker images

REPOSITORY   TAG   IMAGE ID       CREATED         SIZE
myjenkins    1     f61635651954   2 years ago     714MB

jenkinsフォルダをwindows10から見れるように -v でマウントするオプション付きで、コンテナの起動する。

powershell
# docker run -it -d -v /c/docker/jenkins/home:/var/jenkins_home/ --name myjenkins-1 -p 8080:8080 myjenkins:1

コンテナに入り、Administrator passwordを確認

powershell
PS C:\docker\jenkins> docker exec -i -t myjenkins-1 bash
jenkins@b7fe956826b7:/usr/share/jenkins$ cat /var/jenkins_home/secrets/initialAdminPassword
42d3091b11634def8d58589b93102269

Administrator passwordを入力
image.png

Pluginのinstallは自動化したいので、Select Pluginsを選択し、
image.png

Install
image.png

PluginsのDownloadでエラーがでるけど、気にしないことに。
image.png

Continue
image.png

Save and Finish
image.png

Start using Jenkins
image.png

「jobb」というjobを作って一回起動してみた。(画面は省略)
windowsフォルダを確認すると、jobbのworkspaceが作れていることがわかる。
image.png

試しにコンテナを削除してみる

powershell
# docker rm -f xxxx(コンテナ名)

windowsフォルダにはファイルは保持されてるので、
同じイメージを使って別のコンテナを起動しても、

powershell
# docker run -it -d -v /c/docker/jenkins/home:/var/jenkins_home/ --name myjenkins-1 -p 8080:8080 myjenkins:1

データが消えてないので、先ほど設定した情報はそのままでJenkinsが使える。
image.png

次回予告

Plugin Installの自動化
セットアップウィザードの無効化
を実施したい。

関連投稿

プラグインインストール済のJenkins 構築 Docker編 番外編

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerにRootlessモードが入ったぞ!という話

概要

DockerのデーモンをLinux上で実行するためには、通常はroot権限を渡す必要がありましたが、Docker Meetup TokyoのオーガナイザーをやっているNTTの須田さんによるこちらのコミットによって、Dockerをroot権限なしに実行できるようになりました。

より詳しくは、Dockerのエンジニアリングブログを御覧ください。

ためしかた

curl -sSL https://get.docker.com/rootless | sh

これを実行してみるとできます(雑)

取り急ぎびっくりしたのでこんな程度でおわってますが、実際にいろいろ触ってみたら追記する予定。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Google Cloud Composer の構成要素

はじめに

構成要素

抜き出した設定ファイル

https://gist.github.com/kysnm/1fe8c23ec9cefd17c3a8289e15e888db

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

メモリ8GでDockerを頑張る

環境

  • MacBook Pro 2018
  • メモリ8G
  • macOS Mojave

これだといける

でもdocker内が重くなってきたら厳しいかも
Screen Shot 2019-02-13 at 21.44.24.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

何も知らない人から見たdockerー>個人的まとめ

記事の目的

dockerを勉強したいのでとりあえずやってみて適当にまとめる。
超絶入門編、間違いは多数あるだろう

REFERENCE

dockerのHello worldは?

次のコマンド

docker run hello-world

しかしこれはPythonなどのHello worldとは異なる

"hello-world" というイメージをrunしている模様

イメージについては下で説明している

イメージがない場合はDocker image registryというdefaultから
latest versionのものが引き抜かれる

そもそもdockerとは?

仮想環境を作るもの。
Anacondaを使っている僕からすると

conda create --name kokoni_env_name

のようなものだろう。

なぜこんなことをするかというと

Aくん、Bくんが二人それぞれゲームを作っているとする
AくんはPython3、BくんはPython2とすると
仮にBくんがAくんに俺のアプリちょっと遊んで感想クレね?
と頼んだ時にAくんは「Python2用の仮想環境」を作りそこでアプリを動かす感じ
こうすることでAくんはメインのPython3をいじることなくアプリを使える

イメージとは?

アプリのこと、加えて、イメージはレイヤーというもので構成されているようだ
アプリといったがexampleを見た方がいい。

  • OS: mostly Linux flavors like Ubuntu, Alpine etc.
  • Languages: Swift, Ruby, PHP, Haskell, Python, Java, Golang etc.
  • DataBases: MySQL, CouchDB, PostgreSQL, Oracle, IBM Db2 etc.
  • Application frameworks: Node.js, Flask, Kitura, Tomcat etc.
  • web servers: Nginx, Apache etc.
  • web apps including Python apps and Jupyter notebooks for machine learning

レイヤーとは?

イメージを構成するもの。何層かになっているらしい。
ちなみにDockerは仮想マシンとよく比べられて
- 軽い
- 楽い
などの理由から上位互換と言われている。僕のような初心者にとってはサッパリだが
このレイヤには「READ」「WRITE」みたいなのがあって
これのおかげでそれらのメリットがあるのか?といった理解で停滞

コンテナとは?

コンテナ とはそのアプリを動かす場所のこと

Docker Hubとは?

Githubt的な?

client・daemon とは?

Docker clientDocker daemon だがクライエントとサーバーのこと?
REST API と言うものでつながっている模様。

Docker Commandsとは?

簡単なコマンドをまとめます

# イメージの確認
docker images

# コンテナの確認
docker ps -a

# コンテナの削除(idとnameを指定)
docker rm first_3_chara_id name

# status=exitedのコンテナを削除(q=quiet, f=filter)
docker rm $(docker ps -a -q -f status=exited)

# イメージの削除
docker rmi image_name

これからどうする?

もう少しいろいろなサイトを巡って勉強する

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

外部サーバーの Docker の MySQL に Sequel Pro から接続する

Docker で運用している Redmine の MySQL サーバーに Sequel Pro からアクセスしようとしたら、以下のエラーメッセージが表示されて接続できない。

Lost connection to MySQL server at 'reading initial communication packet', system error: 0

外部サーバーに SSH で接続してコンソールから mysql コマンドで接続することは成功している。

mysql -h 127.0.0.1 -u root -p

MySQL サーバーの接続ホスト名を 0.0.0.0172.18.0.2 (コンテナの IP アドレス) などにしてみるも変わらず。

grep refused /var/log/secure
Feb 27 05:49:29 rm sshd[23858]: refused local port forward: originator 127.0.0.1 port 54698, target 172.18.0.2 port 3306
Feb 27 06:34:16 rm sshd[25509]: refused local port forward: originator 127.0.0.1 port 55548, target 0.0.0.0 port 3306
Feb 27 06:34:40 rm sshd[25530]: refused local port forward: originator 127.0.0.1 port 55565, target 127.0.0.1 port 3306

/var/log/secure を覗くと refused local port forward というエラーが出力されているので検索すると /etc/ssh/sshd_configAllowTcpForwarding ディレクティブが影響するよう。

grep ^AllowTcpForwarding /etc/ssh/sshd_config
AllowTcpForwarding no

Docker が動作しているホスト OS の sshd_configAllowTcpForwarding の値が no になっていた。

AllowTcpForwarding は TCP 転送を許可するかどうかを指定する。 1

sed -i '/^AllowTcpForwarding/ s/no/yes/' /etc/ssh/sshd_config
systemctl restart sshd

AllowTcpForwarding の値を yes に変更して sshd を再起動したところ、無事に Sequel Pro で Docker コンテナの MySQL サーバーに接続することができた。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker + Rails + MySQL + Vue で Todo アプリ作成 〜その1〜

はじめに

前回: Docker + Rails で開発環境を作った。
せっかく作ったのに開発しないのはもったいないよね。
でもできることって限られてる。
ということで、TODOアプリを作ってみる

目標

  • trello
  • 今回はとりあえず、seed データを投入して、その一覧を表示させるとこまで。
  • タイトル詐欺してますね、「その1」では Vue は使いません(そこまでいけない)

1.準備

Docker を起動し、コンテナに接続していきます。

$ cd myapp
$ docker-compose up
$ docker ps

myapp_webmysqlCONTAINER ID を控える
そぞれのコンテナに接続をする。

web
$ docker exec -it CONTAINER_ID bash
root@CONTAINER_ID:/myapp#    これでOK
db
docker exec -it CONTAINER_ID bash
root@CONTAINER_ID:/# mysql -u root -p
Enter password:  # database.yml に記載したパスワード
mysql>     これでOK

2. Rails の操作

2.1 モデルを作る

Task モデルを作る。

web
# rails g model Task title:string context:string level:integer
# rails db:migrate
2.2 コントローラーも作る

こっちは Tasks
複数形であることに注目、Rails Tutorial で確かそう習った

# rails g controller Tasks

とりあえず一覧を見たい

tasks_controller.rb
class TasksController < ApplicationController
  def index
    @tasks = Task.all
  end

  def show
  end

  def new
  end

  def create
  end

  def edit
  end

  def update
  end

  def destroy
  end
end

ついでに他のも CRUD の7つも枠だけ用意しておく。

2.3 index で表示させる seed データを作る
seeds.rb
Task.create(
  [
    {
      title: 'task 001',
      context: 'hogehoge',
      level: '2',
    },
    {
      title: 'task 002',
      context: 'fugafuga',
      level: '3',
    },
    {
      title: 'task 003',
      context: 'piyopiyo',
      level: '1',
    },
  ],
)

web
# rails db:seed
2.4 seed データを作成したら db を覗く

MySQL 側でデータベース名を確認し
sequel pro で実際にデータが入っているか確認する。

db
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| myapp_development  | # こいつを使うよ
| myapp_test         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

終わったらコンテナごと exit しちゃう。

image.png
接続をしたら
image.png
やったぜ
次はこのデータを画面に表示させる。

3. View とその準備

さっき rails db:seed で作成したデータを表示させたい。
表示させるページは /tasks/(ルートページ)

3.1 ルーティング
routes.rb
Rails.application.routes.draw do
  root to: 'tasks#index'

  resources :tasks
end
3.2 View ファイルの作成

model, controller は rails g があるけど
view にはないらしい。
ので、手動で作っていく、

$ touch app/views/tasks/index.html.erb
$ touch app/views/tasks/show.html.erb
$ touch app/views/tasks/new.html.erb
$ touch app/views/tasks/edit.html.erb
index.html.erb
<h1>Your Tasks</h1>

<ul>
  <% @tasks.each do |task| %>
  <li><%= task.title %><%= task.context %></li>
  <% end %>
</ul>

Task.all の数だけ Task の持っている title と context を表示

...なんかだんだんモデルの作りがイケてない気がしてきた。

そしてローカルホストに接続して確認。

image.png
できた。
とりあえずこれでおしまい。
続きは次回。

参考

Railsでタスク管理ができるWebアプリを作成してみた(Rails入門)
【Ruby on Rails】ToDoアプリを簡単に作ってみる

ありがとうございます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む