拉取镜像
由于我们要构建一个有拓展潜力的镜像,这里制作一个centos的镜像作为基础
搜索镜像
命令
docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5831 [OK]
ansible/centos7-ansible Ansible on Centos7 128 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 114 [OK]
consol/centos-xfce-vnc Centos container with “headless” VNC session… 109 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 69
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 58 [OK]
tutum/centos Simple CentOS docker image with SSH access 45
centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 40
centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 30
kinogmt/centos-ssh CentOS with SSH 29 [OK]
pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 10
guyton/centos6 From official centos6 container with full up… 10 [OK]
drecom/centos-ruby centos ruby 6 [OK]
centos/tools Docker image that has systems administration… 5 [OK]
darksheer/centos Base Centos Image – Updated hourly 3 [OK]
pivotaldata/centos Base centos, freshened up a little with a Do… 3
mamohr/centos-java Oracle Java 8 Docker image based on Centos 7 3 [OK]
pivotaldata/centos-mingw Using the mingw toolchain to cross-compile t… 2
miko2u/centos6 CentOS6 日本語環境 2 [OK]
pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated wi… 2
blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK]
indigo/centos-maven Vanilla CentOS 7 with Oracle Java Developmen… 1 [OK]
pivotaldata/centos7-dev CentosOS 7 image for GPDB development 0
pivotaldata/centos6.8-dev CentosOS 6.8 image for GPDB development 0
smartentry/centos centos with smartentry 0 [OK]
建议直接上dockerhub去查找,dockerhub是一个开源公共的镜像仓库
拉取
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
标签
如果这里的镜像不带标签,标签默认为latest。镜像名也可以跟:标签名
拉取特定的版本
docker pull centos:centos7.4.1708
版本标签可以在仓库查看 https://hub.docker.com/_/centos?tab=tags
查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 5 weeks ago 237MB
镜像已经在本地了
进入镜像
镜像有了,我们把它运行起来
docker run -it 470671670cac /bin/bash
- 470671670cac是上一步查看镜像的IMAGE ID
- -i: 以交互模式运行容器,通常与 -t 同时使用
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- 末尾加
/bin/bash
相当于,在容器启时执行/bin/bash命令
制作
安装go环境
yum install golang -y
-y作用是安装过程中有(y/n)的选项一律y
安装git
yum install git -y
创建目录
mkdir /workplace
拷贝代码
我们在本地写一个简单的server
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "hello!",
})
})
r.Run()
}
制作vendor
在终端输入
export GO111MODULE=on
export GOPROXY=https://goproxy.io
go mod init
go mod vendor
一个完整的项目构建完成
拷贝项目内容到容器中去
查看一下正在运行的容器
docker ps
>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc87c95e3f9 470671670cac "/bin/bash" 18 minutes ago Up 18 minutes serene_golick
赋值CONTAINER ID,将项目内容拷到容器中
命令
docker cp 要拷贝到宿主机的相应路径 容器名(或容器ID):要拷贝的文件在容器里面的路径
例
docker cp . abc87c95e3f9:/workplac
项目已拷贝到容器中
[root@abc87c95e3f9 /]# cd workplace/
[root@abc87c95e3f9 workplace]# ls
go.mod go.sum main.go
编译
go build -o server
运行
后台运行
nohup ./server &
访问
# curl http://0.0.0.0:8080/ping
{“message”:“hello!”}
将容器提交为新镜像
语法
docker commit 容器id\容器名 新的镜像名字:版本
本地终端执行docker ps
查看当前容器ID
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5615647e67a1 f12714b1c2d3 “/bin/bash” 26 minutes ago Up 26 minutes youthful_meitner
将变更后的容器提交
注意这里的镜像名必须为 xxx/name
xxx为你dockerhub上的用户名base为仓库名,不然会后面push会失败
docker commit 5615647e67a1 casainurbania/base:v1.0
再查看我们打包的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
casainurbania/base v1.0 69b09264f7e1 8 seconds ago 1.15GB
推送到远程仓库
docker push casainurbania/base:v1.0
如果未登录可能需要docker login
一下
查看
推送成功