Docker


最近做毕业设计,部署前后端以及数据库服务时,用到了docker,现在做的差不多了,正好了记录一下

docker 镜像

基本使用

  • 使用docker images可以查看本地的所有镜像,
  • 使用docker pull 镜像名:tag可以从远程拉取指定版本的镜像
  • 使用docker search 镜像名 可以搜索镜像
  • 使用docker rmi 镜像名 可以删除镜像

创建镜像

  1. 从已经创建的容器中更新镜像,并且提交这个镜像
    首先根据一个已有的镜像创建一个容器,然后在这个容器内部进行一定的更改,例如在ubuntu中使用apt-get update,
    然后使用
    docker commit 容器id 要提交的镜像名
    可以把更新后的容器作为一个镜像提交到本地,docker commit有几个参数:
    • -m:指定镜像的描述信息
    • -a:指定镜像作者
  2. 构建镜像
    这里是使用dockerfile来构建一个自定义的镜像
    dockerfile的写法放在后面,写好好一个dockerfile以后,就可以使用
    docker build -t 镜像名:tag dockerfile的路径
    来构建一个镜像

推送镜像

首先使用docker tag 原镜像名tag 现镜像名tag例如
docker tag ubuntu:18.04 username/ubuntu:18.04
来更改镜像tag,然后使用docker push username/镜像名来推送自己的镜像到远程,记得要登陆

docker 容器

构建一个docker 容器

构建docker容器,需要有一个镜像,二者的关系就像是Java中的类和对象一样,一个镜像可以构建多个docker容器,这里使用的命令是:
docker run -it 镜像名 shell名
这里的-it是两个参数,-i 是指进入一个交互,-t是指终端进入交互,使用这个命令一个,就可以直接构建docker 容器成功并进入容器内部,通过一个交互式的终端,想要推出这个容器,使用exit.

  • 如果想要容器一开始就后台执行,加上-d参数
  • 使用 –name 来指定容器名

如果有使用到端口:

  • 可以使用-P来将容器内部使用的网络端口随即映射到我们使用的主机上。
  • 使用-p 主机端口:容器内端口 来映射端口

    基本使用

  • docker ps可以查看所有正在运行的docker容器,加上-a参数可以查看所有容器
  • docker start 容器名 可以启动一个已经存在的容器,不进入交互
  • docker stop 容器名 可以关闭一个已经存在且正在运行的容器
  • docker restart 容器名可以重启一个正在运行的容器
  • docker rm 容器名 可以删除一个容器
  • docker logs 容器id或名 可以查看容器内部的标准输出。
  • docker top 容器名 可以查看容器内部的进程

进入容器

  • docker attach 容器id 可以进入一个容器的交互,但是当使用exit退出的时候,容器会关闭
  • docker exec -it 容器id 交互shell 可以进入一个容器的交互,但是当退出的时候,不会关闭容器

导出容器和导入

  • 使用 docker export 容器id > 快照名.tar 导出一个容器快照
  • 使用 cat 快照名 | docker import - 镜像名
  • 使用 docker import url 可以远程导入一个镜像

ps

  • 这里有一个使用过程中的知识点,我的项目需要使用到postgres和pgadmin,二者都是在docker中运行的,但是pgadmin需要连接到postgres,这个时候因为docker容器之间的网络关系,不能使用localhost进行连接,需要使用
    docker inspect 容器名
    查看docker容器 底层信息,看到这个容器运行时的ip,使用这个ip来连接即可。

Dockerfile

上面说到了dockerfile是用来自定义构建镜像的,下面主要说一下怎么写这个dockerfile:

  • From 指定镜像并拉取
  • Run 运行指令
    这里一共有两种,一种是shell,另一种是可执行文件,格式如下:
    • RUN <命令行命令>
    • RUN [“可执行文件”, “参数1”, “参数2”]
      这里需要注意一点,每次使用指令,都会让docker 构建镜像的时候多构建一层,所以尽量使用&&来连接指令
  • COPY
    复制从主机目录中复制文件或者目录到容器里指定路径。
    • COPY [–chown=:] <源路径1>… <目标路径>
    • COPY [–chown=:] [“<源路径1>”,… “<目标路径>”]

更多指令请看菜鸟教程

这里贴一个部署vue到nginx的dockerfile:

FROM node:10
COPY ./ /app
WORKDIR /app
RUN npm install && npm run build

FROM nginx
RUN mkdir /app
COPY --from=0 /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf

先说到这,下一次要说一下docker compose 和docker的网络和集群问题,深入一下。


  目录