欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

想玩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容器三步骤

  1. 下载镜像
  2. 创建容器
  3. 启动容器

基础操作

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