目錄
安裝docker
啟動docker服務
準備代碼
建立Dockerfile
編譯Dockerfile
檢視剛剛生成的鏡像
運作容器
檢視運作的容器
檢視容器日志
進入容器
檢視容器内部的目錄結構
停止容器
設定容器的restart policy
對已經跑起來的容器挂載檔案
安裝docker
https://www.runoob.com/docker/ubuntu-docker-install.html
啟動docker服務
https://www.runoob.com/docker/ubuntu-docker-install.html
準備代碼
建立項目:demo
在demo下建立app目錄,app下建立main.go
package main
import (
"fmt"
"log"
"net/http"
)
func sayHello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "hello world")
}
func main() {
http.HandleFunc("/", sayHello)
log.Println("server start...")
if err := http.ListenAndServe("0.0.0.0:80", nil); err != nil {
log.Fatal("server start err:" + err.Error())
}
}
在demo下建立script目錄,在script下建立build.sh
#!/usr/bin/env bash
cd /go/src/app/ && ./main
建立Dockerfile
FROM golang
MAINTAINER katy
WORKDIR /go/src/
COPY . .
# 暴露容器端口,與程式代碼裡面開啟的端口一緻
EXPOSE 80
CMD ["/bin/bash", "/go/src/script/build.sh"]
編譯Dockerfile
docker build -f Dockerfile -t go-web .
檢視剛剛生成的鏡像
docker ps
REPOSITORY TAG IMAGE ID CREATED SIZE
go-web latest bc4bb4bb841a 40 minutes ago 821M
運作容器
// -p參數:指定端口映射,格式為:主機(宿主)端口:容器端口
// 将Dockerfile裡面暴露的端口80映射到127.0.0.1:8080上
docker run -p 127.0.0.1:8080:80 bc4bb4bb841a
檢視運作的容器
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99f2cf4efeb3 bc4bb4bb841a "/bin/bash /go/src..." 19 minutes ago Up 19 minutes 127.0.0.1:8080->80/tcp nostalgic_lewin
檢視容器日志
// docker logs 用法
/* Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--help Print usage
--since string Show logs since timestamp
--tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
*/
docker logs -f 99f2cf4efeb3
進入容器
/*
docker exec用法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables (default [])
--help Print usage
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
*/
// 檢視該容器的pwd資訊
docker exec -it 99f2cf4efeb3 pwd
檢視容器内部的目錄結構
// docker exec -it 容器id /bin/bash
docker exec -it db4d36ba98ab /bin/bash
[[email protected] demo]# docker exec -it db4d36ba98ab /bin/bash
r[email protected]:/go/src# ls
Dockerfile README.md app script
停止容器
// docker stop 容器id
docker stop 99f2cf4efeb3
設定容器的restart policy
如果沒有指定restart policy,預設為no。
https://docs.docker.com/config/containers/start-containers-automatically/
在docker run 的時候指定restart policy
docker run --restart always ...
針對已經存在的容器,可以通過
docker update --restart=unless-stopped container_name
對已經跑起來的容器挂載檔案
docker cp /root/init.sh 容器名:/dst .