Docker

 

前言

对docker使用的一些经验总结

辅助工具

mac使用: docker-cli

常见命令

  1. 查看已启动的docker进程及详细信息(containerId, imageVersion, command, public的端口号等)
    docker ps
    
  2. 启动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
    
  3. 下载docker镜像
    # 如果先运行run命令 docker也会自动拉取最新镜像
    # 不带version默认拉取latest版本
    docker pull ubuntu[:version]
    
    示例:
    docker pull ubuntu:latest
    
  4. 根据本地镜像创建新镜像
    # 先用docker ps查看自己镜像的containerId 再根据其制作新版本
    # 自己的镜像搭建了很多环境,需要保存或者分享给他人时 常用此命令
    docker commit [containerId] [image:version]
    
    示例:
    docker commit 9b3305dbe110 ubuntu:Sasaki
    

部署自己的docker镜像

  1. 注册登录docker账号, 在https://hub.docker.com/repositories 上新建一个repository, 类似于: sasakiyori/deploytest
  2. 本地编译可执行程序: 因为是想上传的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
  1. 编译完之后在本地编写Dockerfile (文件首字母必须大写)
FROM alpine:latest
WORKDIR /app/
COPY testbin /app/
COPY folder /app/folder
EXPOSE 8889
ENTRYPOINT ["./testbin"]
  • FROM后接的是本次打包镜像要基于什么镜像
  • WORKDIR为设置你自己镜像中的相对路径 执行命令时会将此路径作为执行的根目录
  • COPY为将本地的文件 复制到 镜像中的某个目录下
  • EXPOSE为对开放端口
  • ENTRYPOINT为执行程序的命令
  1. 在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

  1. 对镜像打标签 有点类似于github的本地分支的概念,需要将本地镜像打上标签来对应上remote docker hub repository
# tag前者指定本地镜像和版本号   后者指定自己先前创建的仓库名
docker tag deploytest:0.0.1 sasakiyori/deploytest

# 这时候再docker images 查看就会发现多了个 sasakiyori/deploytest的repository
docker images | grep sasakiyori/deploytest

  1. 进行上传操作
# 进行登录 成功的时候有Login Succeeded提示
docker login
# 上传 大功告成
docker push sasakiyori/deploytest