##概要
DockerのCentOSイメージに新規ユーザを追加し、そのユーザで運用していける状態にする。最後にDockerfileを置いているので、手っ取り早く環境作りたい人はそちらを使ってみてください。
そもそもDockerだからrootで全部やればいい、という考えもあるので、この記事はrootでOKな人以外に向けた記事になります。
本番環境を想定して、root許可されてない同じ環境で試したい、そういう方に向けた記事になります。
##環境
CentOS Linux release 7.6.1810 (Core)
補足
macOS High Sierra 10.14.3
Docker version 18.09.1, build 4c52b90
##手順
###イメージの取得
CentOSのイメージを取得する。最新バージョンでよいのでバージョンの指定はしない。
docker pull centos
###起動
私はバックグラウンド起動する人なので-dオプションつけます。exitしたり複数コンソールからexecしたりするので。
docker run -d centos:latest /sbin/init
###実行
コンテナIDは起動時に表示されます。
もしくは docker ps コマンドでも確認できます。
docker exec -it コンテナID /bin/bash
sudo権限付与
ユーザを追加してsudo権限を付与する。
####sudoインストール
yum -y update && yum clean all
yum -y install sudo
####ユーザ追加
useradd -m ユーザ名
####パスワード設定
passwd ユーザ名
####sudo設定
echo 'ユーザ名 ALL=(ALL) ALL' >> /etc/sudoers
##確認
作成したユーザでsudoできるか確認する。
su - ユーザ名
sudo コマンド
##Dockerfile
手順で実行したコマンドをDockerfileで書くと以下のようになる。
パスワードをコマンドライン上に書きたくない場合は、ログイン後に設定するようにDockerfileを書き換えてください。
FROM centos:latest
MAINTAINER kashipan
ARG USER
ARG PASSWD
RUN yum -y update && yum clean all && \
yum -y install sudo && \
useradd -m $USER && \
echo "$USER:$PASSWD" | chpasswd && \
echo "$USER ALL=(ALL) ALL" >> /etc/sudoers
###ビルド(イメージ作成)
--build-argでDockerfileで使用する変数を与えることができる。
Dockerfile配置ディレクトリで実行する場合は下記のコマンドです。
docker build -t イメージ名:タグ名 . --build-arg USER=ユーザ名 --build-arg PASSWD=パスワード
###ビルド後の確認
想定通りユーザが作成されていること、sudoでコマンド実行できることを確認する。
####起動
docker run -d イメージ名:タグ名 /sbin/init
####ユーザ指定でシェル実行
docker exec -u ユーザ名 -it コンテナID /bin/bash
※追記(2019/04/12)
上記ユーザ指定のシェル実行の場合、bash設定ファイルも読み込まれないし、通常のログインようになってくれない。
su でユーザ切り替える下記の方法がよいかと。
docker exec -it コンテナID su - ユーザ名
####sudo確認
なんでもいいですが、visudoでDockerfileで指定した設定が書き込まれているか確認する。下記のコマンドが実行できること、また一番下の行にecho "$USER ALL=(ALL) ALL"
があることが確認できればいいです。
sudo visudo
以上!