目录
安装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
[root@localhost demo]# docker exec -it db4d36ba98ab /bin/bash
root@db4d36ba98ab:/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 .