前
最近做毕业设计,部署前后端以及数据库服务时,用到了docker,现在做的差不多了,正好了记录一下
正
docker 镜像
基本使用
- 使用
docker images
可以查看本地的所有镜像, - 使用
docker pull 镜像名:tag
可以从远程拉取指定版本的镜像 - 使用
docker search 镜像名
可以搜索镜像 - 使用
docker rmi 镜像名
可以删除镜像
创建镜像
- 从已经创建的容器中更新镜像,并且提交这个镜像
首先根据一个已有的镜像创建一个容器,然后在这个容器内部进行一定的更改,例如在ubuntu中使用apt-get update
,
然后使用docker commit 容器id 要提交的镜像名
可以把更新后的容器作为一个镜像提交到本地,docker commit
有几个参数:- -m:指定镜像的描述信息
- -a:指定镜像作者
- 构建镜像
这里是使用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>”,… “<目标路径>”]
- COPY [–chown=
更多指令请看菜鸟教程
这里贴一个部署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的网络和集群问题,深入一下。