docker使用

    xiaoxiao2022-07-05  153

    启动命令
    systemctl start docker #启动 systemctl enable docker #设置开机自启动
    基本命令
    docker search centos #搜索镜像 docker pull docker.io/ansible/centos7-ansible #根据需求拉取镜像 for i in `docker search centos|awk '!/NAME/{print $2}'`;do docker pull $i;done #拉去search到的全部镜像 docker images #查看本地镜像
    容器操作:
    docker create # 创建一个容器但是不启动它 docker run -d -p 端口:映射端口# 创建并启动一个容器 -d 是后台启动,-p 自定义的端口:默认端口 注意:通过docker run 启动容器如果没有加后台启动的话,退出后容器就死了,可以通过快捷键ctrl+p+q,退出后容器依然存活 docker stop # 停止容器运行,发送信号SIGTERM docker start # 启动一个停止状态的容器 docker restart # 重启一个容器 docker rm # 删除一个容器 docker kill # 发送信号给容器,默认SIGKILL docker attach # 连接(进入)到一个正在运行的容器 docker wait # 阻塞一个容器,直到容器停止运行 docker login -u xxx -p xxx #登陆镜像仓库
    获取容器信息:
    docker ps # 显示状态为运行(Up)的容器 docker ps -a # 显示所有容器,包括运行中(Up)的和退出的(Exited) docker inspect # 深入容器内部获取容器所有信息 docker logs # 查看容器的日志(stdout/stderr) docker events # 得到docker服务器的实时的事件 docker port # 显示容器的端口映射 docker top # 显示容器的进程信息 docker diff # 显示容器文件系统的前后变化
    导出容器:
    docker cp 容器id:/xxx/xxxx xxx/xxx# 从容器里向外拷贝文件或目录 docker export # 将容器整个文件系统导出为一个tar包,不带layers、tag等信息
    执行:
    docker exec # 在容器里执行一个命令,可以执行bash进入交互式 docker container exec -it 40b23358a1bc /bin/bash
    镜像操作:
    docker images # 显示本地所有的镜像列表 docker import # 从一个tar包创建一个镜像,往往和export结合使用 docker build # 使用Dockerfile创建镜像(推荐) docker commit -p 容器名|容器id # 从容器创建镜像 docker rmi # 删除一个镜像 docker load -i xxx.gz # 从一个tar包创建一个镜像,和save配合使用 docker save -o xxx.gz 镜像名:版本号 # 将一个镜像保存为一个tar包,带layers和tag信息 docker history # 显示生成一个镜像的历史命令 docker tag 容器id tag名 # 为镜像起一个别名
    镜像仓库(registry)操作:
    docker login # 登录到一个registry docker search # 从registry仓库搜索镜像 docker pull # 从仓库下载镜像到本地 docker push # 将一个镜像push到registry仓库中
    运行并进入容器操作:
    docker run -i -t docker.io/1832990/centos6.5 /bin/bash -t 表示在新容器内指定一个伪终端或终端; -i表示允许我们对容器内的 (STDIN) 进行交互; -d表示将容器在后台运行; /bin/bash 。这将在容器内启动 bash shell;
    在容器中安装软件
    # 先搜索软件创库 apt-get update # 然后通过apt-get 命令安装软件 apt-get install vim
    centos
    内核版本 uname -a | -r
    使用Dockerfile构建Docker镜像

    以微服务jar包为例构建成docker镜像

    1:将jar包上传到linux服务器/app/eureka目录为例,在jar包所在的目录创建名为DockerFile的wenjian 2:在Dockerfiler中添加以下内容 # 基于的那个镜像 From java:8 # 将本地文件夹挂载到当前容器 VOLUME /tmp # 复制文件到容器 ADD 可运行的jar /app.jar(给jar包取个别名) # 声明需要暴露的端口 EXPOSE 8761 # 配置容器启动后执行的命令 ENTRYPOINT["jar","-jar","/app.jar"] 3:使用docker build命令构建镜像 # docker build -t microservice-eureka-server.0.0.1 . docker build -t 镜像名称:标签 在dockerfile的相对位置
    修改已有镜像
    # 先搜索软件创库 apt-get update # 然后通过apt-get 命令安装软件 apt-get install vim # 当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了,使用 docker commit 命令来提交更新后的副本。 docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2 # 其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。 使用 docker images 来查看新创建的镜像。
    存储卷
    在容器中使用volumes docker run -it --name bbox1 -v /data/app(本地路径) /data/app(容器中的路径) #docker 管理存储卷 docker run -it -v HOSTDIR:VOLUMEDIR --name bbox2 busybox #绑定挂在卷,从宿主机绑定到容器中 docker inspect -f {{.Mounts}} bbox1 #查看bbox1容器的卷、卷标识符及挂载的主机目录 多个容器的卷使用同一个主机目录 docker run -it --name c1 -v /docker volume/v1:/data busybox docker run -it --name c2 -v /docker volume/v1:/data busybox 复制使用其他容器的卷,为docker run 命令使用--volume-from选项 docker run -it --name bbox1 -v /docker/volumes/v1:/data busybox docker run -it --name bbox2 --volume-from bbox1 busybox
    DockerFile详解
    # Description:test image FROM busybox:latest # 注释 标明作者以及联系 MAINTAINER "author <xxx@xxx.com" # LABEL maintainer="author <xxx@xxx.com" # 复制单个文件 COPY index.html /data/web/html # 复制文件夹(在目标目录中需要把复制的文件夹名给写上),如果源有多个 ,目标一定是目录 COPY data opt/data/ # ADD 命令类似于copy指令,ADD支持使用TAR文件和URL路径 ADD http://xxx.xxx.gz /usr/local/src/ # 此时会将gz文件下载只目标位文件夹中 ADD nginx-1.15.2.tar.gz.gz /usr/local/src/ #此时会将gz文件展开至目标问价中 # WORKDIR 用于为Dockerfile中所有的RUN,CMD,ENTRYPOINT,COPY和ADD指定设定工作目录 WORKDIR /usr/local/src/ ADD nginx-1.15.2.tar.gz ./ #会添加到WORKDIR指定的目录当中 # VOLUME 用于在image中创建一个挂载点目录,以挂载Docker host上的卷或其他容器上的卷,如果挂载点目录路径在此前文件存在,docker run命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中 VOLUME /data/mysql # EXPOSE 用于为容器打开指定要监听的端口以实现与外部通信 # EXPOSE <port>[/<protocol>] # <protocol>用于指定传输层协议,可为tcp或udp二者之一,默认为tcp协议 EXPOSE 11211/udp 80/tcp #ENV 用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其他指令(如ENV,ADD,COPY等)所调用 #调用格式为$variable_name或${variable_name} #ENV <key> <value>或者ENV <key>=<value>... 当赋多个变量时,空格要用转义符 #ENV DOC_ROOT /data/web ENV DOC_ROOT=/data/web \ DOC_DIR=/data/ COPY index.html $DOC_ROOT #直接引用环境变量中定义的变量 COPY index.html ${DOC_ROOT:-/data/web} #引用环境变量中的定义的变量如果没有定义的话,给添加默认值 # RUN 与 CMD 运行的时间点 # RUN 运行在docker build 时期,RUN指令运行于映像文件构建过程中 # CMD 运行在docker run 时期,CMD指令运行于基于Dockerfile构建出的新映像文件启动一个容器时,CMD指令的首要目的在于启动容器指定默认要运行的程序,其运行结束后,容器也将终止,在Dockerfile中可以存在多个CMD指令,但仅最后一个会生效
    kubernetes
    Pod是Kubernetes对象模型中能够创建或部署的最小并且是最简单的基本单元。一个Pod代表在集群中正在运行的一个进程。这些容器共享存储、网络和命名空间,以及如何运行的规范。 kebectl get cs/componentstatus #检查集群状态 kubectl get nodes #获取节点信息 kubectl get pods -n xxx(名称空间) -o wide #获取当前节点所有的pods kubectl get ns #获取名称空间 kubectl describe node nodename(节点名称) #查看节点信息 kubectl version #查看版本 kubectl cluster-info #查看集群信息 kubectl run --help #查看run的帮助文档 kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool][--overrides=inline-json] [--command] -- [COMMAND] [args...] [options] #run命令的参数以及选项 kubectl get deployment #查看当前系统被创建的 kubectl get pods containerid -o yaml #查看容器的配置信息 kubectl create -f pod-demo.yaml #根据配合文件创建,在一个pod里面创建多个容器 kubectl describe pods pod-demo #查看pod资源信息 kubectl delete -f pod-damo.yaml #删除创建的yaml pods kubectl get pods -w #监控pods创建的过程 kubectl exec -it pods -c container -- /bin/sh #进入到pod中的容器
    最新回复(0)