Docker 基础
镜像概念
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
Docker 本身就是一个容器运载体,我们把应用程序和配置依赖打包形成一个可交付的运行环境,这个打包好的运行环境就是 image 镜像文件,只有通过这个文件才能形成 docker 容器, image 文件可以看成容器的模板、
镜像就是类,容器就是实例。
docker牛逼就是因为把 Hypervisor给干掉了。
docker常用命令
docker版本信息查看
`docker --help` 查看 docker 的常用命令
`docker version` 查看 docker 版本
`docker info` 比docker version功能更全
docker对镜像的操作
`docker images` 列出所有的 镜像
`docker images -q` 列出所有镜像的 id
`docker images --digests` 显示详细信息
`docker search mysql` 在 dockerhub 上查找
`docker pull ubuntu:18.04` 拉取某个特定的镜像
`docker rmi ***` 删除某个镜像
`docker rm ***` 删除某个容器
docker 对容器的操作
`docker ps` 容器内的进程
`docker ps -a` 正在运行的和历史上运行的
`exit` 容器停止退出
`ctrl + P + Q` 容器不停止退出
` docker rm -f $(docker ps -a -q)` 按照筛选条件删除
`docker stop **` 停掉容器
`docker kill **` 杀死容器
`docker inspect be` 查看容器内部的信息
`docker attach **` 重新进入刚刚使用 ctrl + P + Q 关掉的容器
`docker exec -t ID ls` 相当于在宿主机上运行的程序
`docker cp be10a66b9f6a:/bin /tmp` 把docker里的东西,持久化到主机里
`docker run -it -p 5000:8080 tomcat` 做端口映射
`docker run -itd -p 6388:6379 redis` 将容器内部的 6379 映射成 6388
docker commit
提交容器副本,使之成为一个新的镜像
一般运行后的镜像改名,就是自己的文件名/镜像名
docker commit -a="zhaodepeng" -m="add mytest01.txt" 3c pengzhao/centos1.0
起个别名,再运行一下,这个就能运行了,而且是你更改后的结果
docker run -itd --name mycentos 129
数据卷
相当于是镜像和宿主机之间的主从复制
下面这句话的意思,就是把主机里的 /tmp/zhao
和 docker里的 /tmp/peng
文件建立映射关系。使用:ro
命令,表示容器内只读。
docker run -it -v /tmp/zhao:/tmp/peng:ro d644
使用 inspect
命令查一下
docker inspect cf
从上边信息可以看到,已经挂载成功;
dockerFile
用来构建镜像的文本文件。文本内容包含一条条的构建镜像所需要的指令和说明。
- 在
tpt
目录下建立一个文件夹,内容如下:
# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,----------success1"
CMD /bin/bash
- 执行
build
命令,将某个文件,命名为zzzyyy/cnetos
docker build -f /tmp/mydocker/dockerfile -t zzyy/cnetos
直接指定当前文件夹下的 dockerfile
文件,不要忘记后面的点
docker build -t runoob/ubuntu:v1 .
- 运行这个镜像,里面有两个数据卷。
数据卷容器
容器之间配置信息的传递,数据卷的声明周期会一直持续到没有容器使用它为止。
docker run -it --name dc01 zzyy/cnetos
docker run -it --name dc02 --volumes-from dc01 zzyy/cnetos
DockerFile 体系结构(保留字指令)
将go程序托管到docker里
在window下开发托管到docker中
- 先再window 下执行打包命令,没有问题后再切换到linux中
go build //打包命令
- 在 main.go所在的目录,执行如下命令,注意:必须使用cmd
set GOARCH=amd64 //设置目标可执行程序操作系统构架,包括 386,amd64,arm
set GOOS=linux //设置可执行程序运行操作系统,支持 darwin,freebsd,linux,windows
go build //打包
- 把生成的文件放到虚拟机
tmp
文件夹下,赋予可执行权限
chmod 777 main
- 运行改文件即可
./main
在linux下开发,托管到docker 中
目录结构
main.go
内的内容
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "成功登录了",
})
})
r.Run(":5001") // listen and serve on 0.0.0.0:8080
}
Dokkerfile
内的内容
## 引入最新的golan ,不设置版本即为最新版本
FROM golang
## 在docker的根目录下创建相应的使用目录
RUN mkdir -p /www/webapp
## 设置工作目录
WORKDIR /www/webapp
## 把当前(宿主机上)目录下的文件都复制到docker上刚创建的目录下
COPY . /www/webapp
## 编译
RUN go build .
## 设置docker要开发的哪个端口
EXPOSE 8080
## 启动docker需要执行的文件
CMD go run main.go