Dockerでgolangを動かしてみます。
Dockerを触ったことがない人でもわかるように意識して書きました。
事前準備
・Dockerのインストールが済んでいること
・Vimの基本的な操作(編集、保存、閉じる)ができること
本題
下記のコマンドを実行します。
docker run -it --name="任意の名前" -p 8080:80 golang:1.15 bash
コマンドオプションの意味
-i
:ホストの入力をコンテナの標準出力をつなげる
-t
:コンテナの標準出力とホストの出力をつなげる
-i,-t
オプションを付けないとコンテナの中で入力できない
-i
オプションと合わせて-it
と記述可能
--name=" "
:コンテナ名に任意の名前を付ける #付けなくても動きます
-p 8080:80
:ポートマッピング
書き方:
-p [ホスト側のポート番号]:[コンテナのポート番号]
-p 8080:80
で localhost:8080 への接続が、コンテナ内のポート 80 へ送られます。
golang:1.15
:構築するイメージを指定
bash
:コンテナ内で Bash シェルを起動
❯❯❯ docker run -it --name="first_app" -p 8080:80 golang:1.15 bash
dockerコンテナの中にはいる
#Vimを使いたいのでupdate実行
root@51c29f39210b:/go# apt update
Get:1 http://deb.debian.org/debian buster InRelease [122 kB]
Get:2 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
...
#Vimをインストール
root@51c29f39210b:/go# apt install vim
Reading package lists... Done
...
#Vimでmain.goファイルを作成
root@51c29f39210b:/go# vim main.go
main.goファイル内に下記のような簡単なコードを書いてみる
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
Vimを閉じてmain.goを実行する。
root@51c29f39210b:/go# go run main.go
Hello, World!
Hello, World!を表示することができました。
おまけ
Dockerから出てもう一度接続する
Dockerから出る
root@51c29f39210b:/go# exit
接続する
#コンテナの状態を確認する
❯❯❯ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
51c29f39210b golang:1.15 "bash" About an hour ago Exited (127) 3 seconds ago first_app
#コンテナを起動する docker start <CONTAINER IDまたはNAME>
❯❯❯ docker start 51c29f39210b
#コンテナに接続するdocker attach <CONTAINER IDまたはNAME>
❯❯❯ docker attach 51c29f39210b
docker exec <CONTAINER IDまたはNAME>
コマンドでも接続できる。
attach
で接続した場合、exitコマンドで抜けるとコンテナが停止しますが、exec
で接続した場合、exitコマンドで抜けるてもコンテナが停止しないという違いがあります。
詳しくはこちらの記事に記載してあります。