目前僅使用到mysql,golang, redis
目錄結構:
yin5th@yin5th:~/code/docker/compose-golang$ tree . ├── docker-compose.yml └── golang └── Dockerfile
docker-compose.yml
version: "3" services: golang: build: ./golang ports: - "8088:8088" links: - "mysql" - "redis" volumes: - $HOME/code/go:/go tty: true mysql: image: mysql:5.7 ports: - "3306:33066" volumes: - /home/code/data/golang-mysql/:/var/lib/mysql/ environment: MYSQL_ROOT_PASSWORD: 123456 redis: image: redis ports: - "6379:63791"
注意,上述代碼中:
1.golang容器下 tty: true 必須 否則在執行docker-compose up -d時 golang容器將退出
2.golang容器下 volumes 是把本地所有的源碼都映射到容器中。僅在本地開發時使用,上線部署時不可。
golang Dockerfile
FROM golang RUN apt-get update && apt-get install -y vim WORKDIR $GOPATH/src EXPOSE 8088
構建容器
docker-compose up -d
查看所有容器
yin5th@yin5th:~/code/docker/compose-golang$ docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------------------------- compose-golang_golang_1 bash Up 0.0.0.0:8088->8088/tcp compose-golang_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp, 0.0.0.0:3306->33066/tcp compose-golang_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp, 0.0.0.0:6379->63791/tcp
進入golang容器
yin5th@yin5th:~/code/docker/compose-golang$ docker exec -it compose-golang_golang_1 /bin/bash root@7985c5eb48e6:/go/src#
更新dockerfile或者docker-compose.yml文件后 在docker-compose.yml 同路徑下執行 docker-compose down 然后再執行 docker-compose up -d
由於沒有在宿主機安裝golang,所以使用Goland時無法自動提示。而且每次在容器中go get新的包后也無法持久保存。為了解決這個問題,想了一個比較笨的辦法。
1.在golang容器中,把golang的goroot目錄復制一份放到/go路徑下:這樣在宿主機的$HOME/code/go下就有了goroot文件
volumes: - $HOME/code/go:/go
2.將宿主機中得到的goroot文件另存,然后將另存的文件再一次映射到容器中,於是golang容器中安裝任何庫,都會保存到宿主機中。Goland中指定goroot的地址,就能正常使用ide中的各項功能了。
方法很笨拙,不知道有不有其他更方便的方法,有的話望指教。