end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

alma linuxで、docker手習い

殆ど使用したことがないので、練習です。

また、centosが、rhelのアップストリームとなった為、 試しに alma linux を使用します。

目次

参考書籍や参考url

install docker

$ sudo yum install yum-utils
$ sudo yum-config-manager \
    --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
=====================================================================
 Package               Architecture Version          Repository      
=====================================================================
Installing:
 containerd.io         x86_64       1.6.15-3.1.el9   docker-ce-stable
 docker-ce             x86_64       3:20.10.23-3.el9 docker-ce-stable
 docker-ce-cli         x86_64       1:20.10.23-3.el9 docker-ce-stable
 docker-compose-plugin x86_64       2.15.1-3.el9     docker-ce-stable
<略>
$ docker --version
Docker version 20.10.23, build 7155243
  • docler-ce:Dockerデーモン本体. ceは、Community Edition
  • docker-ce-cli:Docker操作用コマンド群
  • containerd.io:Dockerデーモンが動作するために必要なパッケージ

gpasswd -a ~ docker

以下を実行しない場合、「sudo docker ~」のようにsudoでの実行要

$ sudo gpasswd -a end0tknr docker
Adding user end0tknr to group docker

docker の daemon起動

$ sudo systemctl start  docker
$ sudo systemctl enable docker

$ sudo docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.10.0-docker)
  compose: Docker Compose (Docker Inc., v2.15.1)
  scan: Docker Scan (Docker Inc., v0.23.0)
<略>
 Docker Root Dir: /var/lib/docker

極基本的なdockerコマンド

## docker hubからgihyodocker/echoをdownloadし
## port;9000→8080のport forwardで起動
$ docker container run -t -p 9000:8080 gihyodocker/echo:latest

## curlコマンドで、アクセス
$ curl http://localhost:9000
Hello Docker!!

## コンテナ停止
$ docker container stop  $(docker container ls -q)

Dockerfile の使用例

vi Dockerfile

FROM golang:1.13

RUN mkdir /echo
COPY main.go /echo

CMD ["go", "run", "/echo/main.go"]

vi main.go

package main
import (
    "fmt"
    "log"
    "net/http"
)
func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        log.Println("received request")
        fmt.Fprintf(w, "Hello Docker!!")
    })
    log.Println("start server")
    server := &http.Server{Addr: ":8080"}
    if err := server.ListenAndServe(); err != nil {
        log.Println(err)
    }
}

buildや実行、停止

##「example/echo:latest」という名前で「.」以下をbuild
$ docker image build -t example/echo:latest .

## build結果の確認
$ docker image ls
REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
example/echo       latest    ccdda0ad9a49   7 seconds ago   803MB
golang             1.13      d6f3656320fe   2 years ago     803MB

## buildされたcontainerをバックグランド(-d)実行
$ docker container run -d -p 9000:8080 example/echo:latest

$ docker container ls
CONTAINER ID IMAGE               COMMAND                CREATED         
c970166f457c example/echo:latest "go run /echo/main.go" 9 seconds ago

## curlコマンドでアクセスし、テスト
$ curl http://localhost:9000

## 停止
$ docker container stop $(docker container ls --filter "ancestor=example/echo" -q)

終了コンテナの表示や、一括削除

$ docker container ls -a

$ docker system prune
Are you sure you want to continue? [y/N] y

docker composeの使用例

最近では、docker compose の別途installは不要

$ docker compose version
Docker Compose version v2.15.1

vi docker-compose.yml

以下で、先程のDockerfileと、main.goと同様の動作を行えます。

version: "3"
services:
  echo:
    image: example/echo:latest
    ports:
    - 9000:8080

実行、テスト、停止

## 実行
$ docker compose up -d

## curlコマンドでアクセスし、テスト
$ curl http://localhost:9000

## 停止
$ docker compose down