alpineのユーザ作成が曲者だった
alpineのユーザ作成がうまく行かなかった
alpine環境のnodeのdocker imageを元にDockerfileを書いていて、dockerfileにlinuxユーザを作成する命令を書いてdocker-compose build
したとき
Building app Step 1/7 : FROM node:12.12.0-alpine ---> 0fcfd7e52b09 Step 2/7 : WORKDIR /usr/src/app ---> Running in 1f7f40cfe516 <<<< 中略 >>>> /bin/sh: useradd: not found ERROR: Service 'app' failed to build : The command '/bin/sh -c useradd -m --uid ${DOCKER_UID} --groups sudo ${DOCKER_USER} && echo ${DOCKER_USER}:${DOCKER_PASSWORD} | chpasswd' returned a non-zero code: 127
useraddコマンドがないよとのこと
結論
adduserコマンドを使いましょう
オプションの使い方も違うので注意
adduser
Usage: adduser [OPTIONS] USER [GROUP] Create new user, or add USER to GROUP -h DIR Home directory -g GECOS GECOS field -s SHELL Login shell -G GRP Group -S Create a system user -D Don't assign a password -H Don't create home directory -u UID User id -k SKEL Skeleton directory (/etc/skel)
Githubの二要素認証を設定したらgit pushがエラーになるのでSSH接続設定する
二要素認証とは
異なる2つの要素で認証を行うことによってセキュリティの強化を図る手法のこと
「認証の三要素」と言われる下記の3つの要素から2つの要素を組み合わせる
- 認証の三要素
- 知識(本人が知っていること:暗証番号、パスワード)
- 所有(本人が持っているもの:キャッシュカード、スマホ)
- 生態(本人の特徴:指紋、顔、静脈)
二要素認証の設定を行うことで、パスワードが盗まれてもアカウントの不正利用を防止することができる
Gitの二要素認証の設定自体はめちゃ簡単にできる
Gitの接続方式をSSHに変更する必要がある
Gitの二要素認証設定を行うと、git push
ができなくなる事象が発生する
こんな感じ
$ git push git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
デフォルトではhttps
を用いた接続でリポジトリとのやりとりを行うような設定になっているが、この接続方式をSSHに変更することで正常にgit push
することができる
SSH接続できるようにする(本題)
本題はlinux環境で行っています。
SSH認証の公開鍵と秘密鍵を作成する
ssh-keygen
コマンドで鍵を生成する
メールアドレスはGitHubのメールアドレスを指定するのが一般的
$ cd ~/.ssh $ ssh-keygen -t ed25519 -C test@hoge.com //自分のメールアドレス Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_ed25519. Your public key has been saved in /root/.ssh/id_ed25519.pub. The key fingerprint is: SHA256:A8NkbBxnD63KEoupkrsdAQ8fErexXRaIC2jKpmQ7Xhg test@hoge.com The key's randomart image is: +--[ED25519 256]--+ |o o. +Bo+. | |o+.=.*+o o. | |B.+...+ .. | |.E... o. | |= Bo + .S | |.+ooo o . | |.o+ . | |+o . | |+o. | +----[SHA256]-----+
オプション
-t : 作成する鍵の暗号化方式を「rsa」「dsa」「ecdsa」「ed25519」から指定する
-C : コメントを指定する(デフォルトは「ユーザ名@ホスト名」)
このコマンドを打つとデフォルトのファイル場所をどこにするか、とパスフレーズを聞かれるの任意入力する
これによって鍵ができる
id_ed25519 : 秘密鍵
id_ed25519.pub : 公開鍵
クライアントへのSSHキーの設定
キーを管理するために新しいSSHキーをssh-agentに追加する
$ eval "$(ssh-agent -s)" Agent pid 23
$ ssh-add ~/.ssh/id_ed25519
リモートURLをHTTPSからSSHへ切り替える
ワーキングディレクトリをローカルプロジェクトに変更し、 変更したいリモートの名前を取得するため既存のリモート一覧を表示する
$ cd your_local_project $ git remote -v origin https://github.com/USERNAME/REPOSITORY.git (fetch) origin https://github.com/USERNAME/REPOSITORY.git (push)
git remote set-url
コマンドでリモートの URL を HTTPS から SSH に変更する
USERNAMEとREPOSITORYは自分の環境によって書き換える
$ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git
変更できたか確認する
$ git remote -v origin git@github.com:USERNAME/REPOSITORY.git (fetch) origin git@github.com:USERNAME/REPOSITORY.git (push)
GitHubへの公開鍵の登録
$ sudo apt-get install xclip $ xclip -selection clipboard < ~/.ssh/id_ed25519.pub
※うまくコピーできてない時はエディタで~/.ssh/id_ed25519.pub
を開いて中身をコピーする
下記の1〜6はGitHubサイト上で行う
- GitHubの任意のページでプロフィール画像をクリックし、Settings(設定)をクリック
- ユーザ設定サイドバーでSSH and GPG keys(SSHおよびGPGキー)をクリック
- New SSH key, Add SSH keyをクリック
- titleに新しいキーを説明するラベルを追加
- キーをKeyフィールドに貼り付ける
- Add SSH keyをクリック
SSH接続テスト
$ ssh -T git@github.com
Warning: Permanently added the RSA host key for IP address '52.69.186.44' to the list of known hosts. Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
You've seccessfully authenticated
をみるにいけたっぽい
git pushしてみる
$ git push Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Delta compression using up to 2 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 283 bytes | 94.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To github.com:USERNAME/REPOSITORY.git * [new branch] master -> master
無事git push
完了
DockerでGolangコンテナ立てて入門する
前提条件
- dockerがインストールされている
docker imageを持ってくる
このコマンドでdockerhubから最新のgolang docker imageを落とすことができる
$ docker pull golang
落としてきたdocker imageを確認する
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE golang latest 861b1afd1d13 7 weeks ago 862MB
コンテナを起動する
落としてきたimageのコンテナを起動する
$ docker run -d -ti --name my_golang golang
最後のgolangはIMAGE IDでもおっけい
今回やと861b1afd1d13
オプション
-d : コンテナをバックグラウンドで実行するよ
-t (tty) : ホスト側のコンソールの標準出力とコンテナの標準出力をつなげる
-i (interactive) : ホスト側の入力をコンテナの標準出力をつなげる
--name : コンテナの名前を決める
コンテナが立ち上がったかどうか確認する
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 455c14a23d88 golang "bash" 2 seconds ago Up 1 second my-golang
これでmy-golangという名前のgolangコンテナができた
いざ、立ち上げたコンテナに入る
$ docker exec -ti golang bash root@7272531ef7bd:/go#
実行環境構築完了
これだけで新しい言語に挑戦できるdocker素敵☆
ついでにHello Goする
エディタ入れる
viもvimも入っていなかったのでvimをinstallする
vscodeのremote containerを使う選択肢もありではあるが、今回はvimを使うことにする
ディストリビューションの確認
まずはlinuxのディストリビューションを確認
$ cat /etc/*release PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"
Debianなのでパッケージ管理はapt
apt-getをアップデート
$ apt-get update Get:1 http://deb.debian.org/debian buster InRelease [121 kB] Get:2 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB] Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB] Get:4 http://security.debian.org/debian-security buster/updates/main amd64 Packages [271 kB] Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB] Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [9504 B] Fetched 8426 kB in 4s (2232 kB/s) Reading package lists... Done
vimをinstallする
$ apt-get -y install vim
vimを起動して見て確認
$ vim
:q
でvim終了
goを書いてみる
$ mkdir myapp $ cd myapp $ vim hello_world.go
package main import "fmt" func main() { fmt.Println("Hello Go") }
goファイルを実行する
golangはコンパイル言語ですがgo run
コマンドでコンパイルと実行を一緒にやってくれる
$ go run hello_world.go Hello Go
いつもCentOSのISOファイル何を選ぶか迷うので用語をまとめてみた
ISOファイルとは
CD,DVDの中身をひとつにまとめたアーカイブファイルのこと 今回の場合だとCentOSの中身がひとつにまとまったファイル
CPUアーキテクチャの種類
OSを動かすにはCPUが必要です。
そのためCPUアーキテクチャによってISOファイルの中身も変わってきます。
x86_64
インテルの64ビットマイクロプロセッサのアーキテクチャの名称
x86が32ビット、x64が64ビット
x86_64は、x86(32ビット)が64ビットに拡張されたもの
32ビットなのに、x86である理由はインテルの型番から取られたかららしい
ARM64
イギリスのケンブリッジに本社を置くARMという会社により開発されたアーキテクチャの名称
AndroidやiPhone,Rasberrypyに使われている
IBM Power
IBMのマイクロプロセッサ
IBMなどのスーパーコンピュータ、UNIX、ワークステーション、オフィスコンピュータなどで使用されている。
ディスクイメージの違い
DVD ISO
CentOSのGUIのインストーラでインストールできる全パッケージが最初から含まれているディスクイメージ
多くの場合このイメージが使われる
Everything ISO
CentOSで利用できる全パッケージが最初から含まれているディスクイメージ
このイメージを使用すればネット接続していなくても任意のパッケージをインストールできる
その代わりサイズが大きいので基本的にUSBなどにダウンロードする
Minimal ISO
必要最低限のパッケージだけが含まれているディスクイメージ
後にyum | dnf install 〇〇
する人用