天天看点

docker部署简单的go web http服务安装docker启动docker服务准备代码新建Dockerfile编译Dockerfile查看刚刚生成的镜像运行容器查看运行的容器查看容器日志进入容器查看容器内部的目录结构停止容器设置容器的restart policy对已经跑起来的容器挂载文件

目录

安装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部署简单的go web http服务安装docker启动docker服务准备代码新建Dockerfile编译Dockerfile查看刚刚生成的镜像运行容器查看运行的容器查看容器日志进入容器查看容器内部的目录结构停止容器设置容器的restart policy对已经跑起来的容器挂载文件

在docker run 的时候指定restart policy

docker run --restart always ...
           

针对已经存在的容器,可以通过

docker update --restart=unless-stopped container_name
           

对已经跑起来的容器挂载文件

docker cp /root/init.sh   容器名:/dst .
           

继续阅读