前言
对docker使用的一些经验总结
辅助工具
mac使用: docker-cli
常见命令
- 查看已启动的docker进程及详细信息(containerId, imageVersion, command, public的端口号等)
docker ps - 启动docker镜像
docker run -it -d --name [your_instance_name] -p [local_port]:[instance_port] -v [local_path]:[instance_path] [image:version] 示例: docker run -it -d name ubuntu-test -p 4567:22 -v /home/:/home/ ubuntu:latest - 下载docker镜像
# 如果先运行run命令 docker也会自动拉取最新镜像 # 不带version默认拉取latest版本 docker pull ubuntu[:version] 示例: docker pull ubuntu:latest - 根据本地镜像创建新镜像
# 先用docker ps查看自己镜像的containerId 再根据其制作新版本 # 自己的镜像搭建了很多环境,需要保存或者分享给他人时 常用此命令 docker commit [containerId] [image:version] 示例: docker commit 9b3305dbe110 ubuntu:Sasaki
部署自己的docker镜像
- 注册登录docker账号, 在https://hub.docker.com/repositories 上新建一个repository, 类似于: sasakiyori/deploytest
- 本地编译可执行程序: 因为是想上传的docker hub上, 采用的是微型基础镜像alpine, 需要在linux上跑程序, 我使用的是go在非linux平台上进行编译, 会遇到可执行文件运行问题, 所以需要添加编译条件达成交叉编译
# mac下编译linux可执行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o {binName} main.go
# windows下编译linux可执行程序
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build -o {binName} main.go
- 编译完之后在本地编写Dockerfile (文件首字母必须大写)
FROM alpine:latest
WORKDIR /app/
COPY testbin /app/
COPY folder /app/folder
EXPOSE 8889
ENTRYPOINT ["./testbin"]
- FROM后接的是本次打包镜像要基于什么镜像
- WORKDIR为设置你自己镜像中的相对路径 执行命令时会将此路径作为执行的根目录
- COPY为将本地的文件 复制到 镜像中的某个目录下
- EXPOSE为对开放端口
- ENTRYPOINT为执行程序的命令
- 在Dockerfile路径下执行:
docker build -t deploytest:0.0.1 ./
创建成功, 可以在docker desktop上看到已经生成的镜像:

也可以通过命令查看到:
$ docker images | grep deploytest
$ REPOSITORY TAG IMAGE ID CREATED SIZE
$ deploytest 0.0.1 cee868251e0a 5 minutes ago 21.4MB
- 对镜像打标签 有点类似于github的本地分支的概念,需要将本地镜像打上标签来对应上remote docker hub repository
# tag前者指定本地镜像和版本号 后者指定自己先前创建的仓库名
docker tag deploytest:0.0.1 sasakiyori/deploytest
# 这时候再docker images 查看就会发现多了个 sasakiyori/deploytest的repository
docker images | grep sasakiyori/deploytest
- 进行上传操作
# 进行登录 成功的时候有Login Succeeded提示
docker login
# 上传 大功告成
docker push sasakiyori/deploytest
PREVIOUSPostgreSQL学习
NEXTCasbin