想玩Docker吗?那就先来了解一下基本操作吧
程序员文章站
2024-03-11 17:37:01
...
文章目录
前言
本章整理了Docker的基本操作
镜像相关操作
基础操作
docker version # 查看docker版本
docker search 关键字 # 查找指定镜像
docker pull 关键字 # 下载镜像
(AUFS联合文件系统,分层下载,下载后放在/var/lib/docker)
/var/lib/docker/image/overlay/repositories.json # 下载文件信息
docker images # 查看镜像信息
docker inspect 镜像ID # 获取镜像信息
docker tag nginx:latest nginx:web # 修改镜像信息
docker images | grep nginx # 查看nginx镜像信息
nginx latest 35c43ace9216 3 weeks ago 133MB
nginx web 35c43ace9216 3 weeks ago 133MB
docker里的两种格式文件:json、yaml
docker rmi nginx:web # 删除标签为web的nginx镜像
docker save -o nginx nginx:latest # 存出镜像名为nginx放在当前目录下
载入镜像
方法一:
docker load < nginx
docker load -i nginx
方法二:
docker load --input nginx
上传镜像
镜像的管理方式非常像git,可以使用docker push
命令上传自己本地镜像到仓库,默认上传到DockerHub
官方仓库(需要登陆)
命令格式为:
docker push NAME [:TAG]
在上传之前一般会先为自己的镜像添加带自己名字(作者信息)的标签
docker tage nginx:lastest abc/nginx:web #用户名/仓库名:镜像名
docker login #登录
Username::docker #账户
password:xxxxxx #密码
Email:xxx@xxx.com #邮箱
镜像创建
基于已有镜像创建:
将容器里面运行的程序及运行环境打包生成新的镜像
docker commit [选项] 容器ID/名称 仓库名称:[标签]
选项:-m
:说明信息-a
:作者信息-p
:生成过程中停止容器的运行
基于本地模板创建
- 通过导入操作系统模板文件生成新的镜像
- 使用wget命令导入为本地镜像
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
- 导入成功后可查看本地镜像信息
docker images | grep new
基于Dockerfile创建
- Dockerfile是由一组指令组成的文件
- Dockerfile结构四部分
基础镜像信息
维护者信息
镜像操作指令
容器启动时执行指令 - Dockerfile每行支持一条命令,每条命令可携带多个参数,支持以"#"开头的注释
编写Dockerfile文件
创建一个目录进入,再创建一个jdk_dockerfile
文件,vim jdk_dockerfile
。
FROM centos:7
MAINTAINER wolf
RUN yum -y update
RUN yum -y install httpd #基于centos:7镜像上执行命令,并提交到新镜像,安装apache软件
EXPOSE 80 #新镜像加载到Docker时开启80端口
ADD index.html /var/www/html/index.html #复制网站首页文件,将源文件复制到目标文件,源文件要与Dockerfile在同一个目录或者是一个URL
ADD run.sh /run.sh #复制执行脚本到镜像中
RUN chmod 755 /run.sh (新镜像中赋予执行权限)
CMD ["/run.sh"] #启动容器时执行脚本 (指令启动容器时要运行的命令或脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行)
dockerfile指令说明
指令的一般格式为INSTRUNCTION arguments,指令包括FROM、MAINTAINER、RUN等。具体指令及说明如下
指令 | 说明 |
---|---|
FROM | 指定所创建镜像的基础镜像 |
MAINTAINER | 指定维护者信息 |
RUN | 运行命令 |
CMD | 指定容器启动时默认执行的命令 |
ADD | 赋值指定的路径下的内容到容器中的路径下,可以为URL;如果为tar文件,会自动解压到路径下 |
ENV | 指定环境变量 |
LABEL | 指定生成镜像的元数据标签信息 |
EXPOSE | 声明镜像内服务所监听的端口 |
COPY | 赋值本地主机的路径下的内容到容器中的路径下;一般情况下推荐使用COPY而不是ADD |
ENTRYPOINT | 指定镜像的默认入口 |
VOLUME | 创建数据挂载点 |
USER | 指定运行容器时的用户名或UID |
WORKDIR | 配置工作目录 |
ARG | 指定镜像内使用的参数(例如版本号信息等) |
ONBUILD | 配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作的命令 |
STOPSIGNAL | 容器退出的信号 |
HEALTHCHECK | 如何进行健康检查 |
SHELL | 指定使用SHELL时的默认SHELL类型 |
创建运行脚本:
vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
写一个主页:
echo “this is web test” > index.html
生成镜像:
docker build -t httpd:centos . (末尾有".",且与centos之间有空格)
新镜像运行容器:
docker run -d -p 1216:80 httpd:centos
在这里做了端口映射:-p指定端口1216
测试访问:
httpd://20.0.0.31:1216
容器相关操作
docker容器三步骤
- 下载镜像
- 创建容器
- 启动容器
基础操作
docker create -it nginx:latest /bin/bash #创建容器,例如创建一个nginx容器,标签是latest
-i:让容器的标准输入保持打开
-t:让Docker分配一个为终端
docker ps -a #查看容器信息
-a:列出所有的容器,包括未运行的容器
docker start 容器ID #启动容器
docker stop 容器ID #停止容器
容器的状态:
up
:运行created
:已创建但未启动exited
:停止或执行完指令被释放(其中有个返回值,为0的时候表示执行完后自动结束,非0表示执行异常或在执行过程中让其stop)
启动执行命令查看系统根目录
docker pull paigeeworld/centos7 #下载镜像
docker create -it paigeeworld/centos7 /bin/bash #创建容器
docker start 容器ID #启动容器
将上面的三步骤用一条命令完成:docker run paigeeworld/centos7 /usr/bin/bash -c ls
一条命令将三步骤全部完成,如果没有镜像则会先下载,结束后会释放资源。执行完毕直接关闭,状态为Exited
容器持续在后台运行:
docker run -d paigeeworld/centos7 /bin/bash -c “while true;do echo hello;done”
-d:在后台运行
容器导出:
docker export 4613c886e5f9 > nginx_c docker export
容器的ID/名称 > 文件名
容器导入(会生成镜像,但不会创建容器):
cat nginx_c | docker import -nginx:web
cat 文件名 | docker import -生成的镜像名称:标签
批量删除容器(删除非运行状态的容器):
docker ps -a | awk ‘{print "docker rm "$1}’ | bash
进入容器
docker exec 容器的ID/名称 /bin/bash
在容器运行状态下才可以进入
退出容器
exit
上一篇: Cocoapods的更新及其过程
下一篇: C++之POD数据类型