LoginSignup
3
4

More than 1 year has passed since last update.

Dockerチートシート

Last updated at Posted at 2019-06-28

Dockerとか使いたくないんやが・・・😇

Dockerのインストール

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

一般ユーザでdockerコマンドを使えるようにするには、さらに、

sudo usermod -aG docker pi

を実行してからいちどログアウトする。

ただしこれは、sudoのようなもので、dockerコンテナが起動されるのはdockerdが起動しているユーザの権限になる。
本当にユーザ権限でdockerコンテナを起動したい場合は、後述の「ユーザ権限でコンテナを起動する」で紹介しているrootless dockerを使用する。

Dockerfileの書き方

FROM debian:buster

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get -y update && \
    apt-get -y install make && \
    rm -rf /var/lib/apt/lists/*

COPY . /workdir/

WORKDIR /workdir

CMD make help

イメージをビルドする

buildrootというタグのついたイメージをビルドするには、

docker build -t buildroot .

build context からファイルを除外する

.dockerignoreを使う。

下記のような.dockerignoreが存在する状態でdocker buildすると、appディレクトリだけが build context に含まれるようになる。

.dockerignore
*
!app
*/.*.swp

上記の例だと、

  • 全部除外する
  • appだけ含める
  • 任意のディレクトリにある.*.swpというファイル(vimのswapファイル)を除外する

コンテナの起動してシェルを実行する

  • --nameを指定しない場合は自動生成されたコンテナ名が使用される
docker run -it --name container_name image_name /bin/bash

停止したコンテナを再度起動する

  • runしたときに指定したコマンドが実行される(はず)
dokcer start -i container_name

起動中のコンテナで新たにシェルを実行する

  • --loginオプションをつけないと/etc/profileなどを読み込んでくれない模様
docker exec -it container_name /bin/bash --login

ホストから起動中のコンテナにファイルをコピーする

  • etc/apt/trusted.gpgをコンテナ名wizardly_shockleyのコンテナの/root以下にコピーする
docker cp etc/apt/trusted.gpg wizardly_shockley:/root

シェルの履歴補完がきかない

https://qiita.com/Yuki-Inoue/items/60ec916383025160fbb8
detach keyがデフォルトでCtrl+Pに割り当てられてるのが原因っぽい。
なぜそこに割り当てたんだ・・・

ユーザ権限でコンテナを起動する

Rootless Dockerが既にリリース版にはいっているのでこれを使う。

もちろん一般ユーザで
$ curl -fsSL https://get.docker.com/rootless | sh

インストール後に表示される指示に従ってパスを追加したら、あとはふつうにdocker buildとかdocker runとかが使える。
pi-genのような、binfmt-miscを使うコンテナがうまく動かなかった。(やり方がわるいだけかもしれないが)

bashでdockerコマンドの入力補完

  • Docker for Mac にバンドルされているものを使うとよいらしい
ln -s /Applications/Docker.app/Contents/Resources/etc/docker.bash-completion /usr/local/etc/bash_completion.d/docker

from: http://uorat.hatenablog.com/entry/2017/02/01/163027

--platform でサポートされているアーキテクチャの一覧を見る

本当にこれでいいのか・・・?

$ docker buildx ls
NAME/NODE       DRIVER/ENDPOINT STATUS  PLATFORMS
desktop-linux * docker                  
  desktop-linux desktop-linux   running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default         docker                  
  default       default         running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

マルチアーキテクチャでビルドしてdocker hubにpushする

docker buildx create --use
docker buildx build --push --platform linux/amd64,linux/arm64,linux/arm/v7 --tag miminashi/legacy_chat:latest .
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4