docker基本实践(代码片段)

尚墨1111 尚墨1111     2022-12-01     232

关键词:

文章目录

docker

1 是什么

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)

Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像。运行中的这个镜像称为容器,容器启动是非常快速的。

即打包好的软件,所有环境都配置好了,开箱即用,无需再配置

  • 镜像,打包好的软件,发布出去,相当于软件的模板(类似于Java中的类class)
  • 容器,获取镜像到本地,运行起来,就是一个容器(类似于Java中类的实例)
  • docker宿主机,就是本机
  • docker仓库,存放镜像的地方,类似于git
  • docker注册仓库服务器,存放仓库的地方,相当于github

文章资源:

https://blog.csdn.net/u010358168/article/details/86711551?spm=1001.2014.3001.5506

2 常用命令

将本机内容复制到docker 容器中 docker cp 源地址 容器名称:目标地址

docker cp  D:\\cts\\cts-0825 59082bc9f284fe4b1309e3bd617b65c5506c6446f8098b317114f9e11b0a3f9b:/app/

查看已有端口 docker image

docker run -it -p 8080:8080  yushl/tomcat  /bin/bash	 # 指定本机端口映射容器端口

docker run -it -p 127.0.0.1:5100:5100 -p 127.0.0.1:5102:5102  ubuntu  # 指定本机ip:端口映射

查看正在运行的容器:docker ps

查看容器的端口映射信息:docker port 容器名称

每次启动新的ubuntu容器,原先下载的东西都会没有

# 增加新的用户
adduser sommer
# 修改用户的sudo 权限

vim /etc/sudoers
# 在/etc/sudoers文件中找到root	ALL=(ALL:ALL) ALL,在该行下面添加:
sommer	ALL=(ALL:ALL) ALL

# 下载安装 vim sudo
apt-get update
apt-get install vim
apt-get install sudo

3 镜像

3.1 获取镜像

从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub(docker.io)
  • 仓库名: <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像
# $ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
$ docker pull ubuntu:18.04
# 上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub (`docker.io`)获取镜像。
# 镜像名称是 `ubuntu:18.04`,因此将会获取官方镜像 `library/ubuntu` 仓库中标签为 `18.04` 的镜像

3.2 运行容器

  • -i:交互式操作,一个是 -t 终端,-it表示容器需要交互式终端
  • ubuntu:18.04 镜像为基础来启动容器
  • 镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 bash
$ docker run -it ubuntu:18.04 bash

3.3 列出镜像

docker image ls
docker image ls ubuntu:18.04
docker image rm 镜像id/镜像名 # 删除镜像

3.4 脚本定制镜像

3.4.1 dockerfile

把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像。这个脚本就是 Dockerfile。

Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建

from ubuntu:latest #指定基础镜像

run apt update \\		# shell格式的命令,就像直接在命令行中输入的命令一样
    && apt install sudo \\
    && apt install net-tools \\
    && apt install jq -y \\
    && mkdir /home/djitool 
    
    
copy .  /home/tool/   # 从上下文目录中复制文件或者目录到容器里指定路径

run cd /home/tool/ \\
    && sudo ./upgrade.sh

expose 5100 5101 #声明容器运行时提供服务的端口,仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。

entrypoint ["/home/tool/start.sh","5101"]

3.4.2 容器启动命令

开机自启动:ENTRYPOINT和CMD都是让用户指定一个可执行程序, 这个可执行程序在container启动后自动启动.

CMD 作用是指定具体的参数

  • shell 格式:CMD <命令>,shell 格式的话,实际的命令会被包装为 sh -c 的参数的形式进行执行,docker用/bin/sh -c的语法调用.
  • exec 格式:CMD [“可执行文件”, “参数1”, “参数2”…],表示法后面用了类似于JSON的语法表示要执行的命令. 这种用法告诉docker不需要调用/bin/sh执行命令
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

# 例如
FROM ubuntu:trusty
CMD ping localhost # 相当于实际运行的命令是 /bin/sh -c 'ping localhost'.
CMD ["/bin/ping","localhost"] 
# 例如
CMD ["/bin/echo", "this is a echo test"]
# 运行镜像
docker run test  # docker run命令如果指定了参数会把CMD里的参数覆盖,如docker run -it ubuntu /bin/bash 
# 输出
this is a echo test

ENTRYPOINT入口点

用于设定容器启动时第一个运行的命令及其参数,任何使用docker run <image>命令传入的参数都会附加在entrypoint指令之后

  • ENTRYPOINT指定默认的运行命令, CMD指定默认的运行参数. ENTRYPOINT和CMD同时存在时, docker把CMD的命令拼接到ENTRYPOINT命令之后, 拼接后的命令才是最终执行的命令
FROM ubuntu:trusty
ENTRYPOINT ["/bin/ping","-c","3"]
CMD ["localhost"] 
# 相当于  /bin/ping -c 3 localhost,用shell命令行发送ping请求3次

ENTRYPOINT [ "sh", "-c", "echo $HOME" ] # 相当于 sh -c echo $HOME,即用shell命令行 执行echo $HOME命令

另外一种形式是使用一个脚本作为ENTRYPOINT的值。按照惯例来说,脚本名中通常包含entrypoint关键字。在这个脚本中,你可以做相关的配置,设置环境变量等,例如下面代码:

COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["postgres"]

例如,下面就是Postgres官方镜像中的ENTRYPOINT脚本中的内容:

#!/bin/bash
set -e
if [ "$1" = 'postgres' ]; then
    chown -R postgres "$PGDATA"
    if [ -z "$(ls -A "$PGDATA")" ]; then
        gosu postgres initdb
    fi
    exec gosu postgres "$@"
fi
exec "$@"

3.5 构建镜像

Dockerfile 文件所在目录执行:

docker build [选项] <上下文路径/URL/->

docker build -t dtf_service:v1 .	#这个.是在指定上下文目录,docker build 命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像
docker build -t nginx:v3 .  # 指定了最终镜像的名称 -t nginx:v3
# docker build 还支持从 URL 构建,比如可以直接从 Git repo 中构建
docker build -t hello-world https://github.com/docker-library/hello-world.git #master:amd64/hello-world

docker基本实践(代码片段)

文章目录docker1是什么2常用命令3镜像3.1获取镜像3.2运行容器3.3列出镜像3.4脚本定制镜像3.4.1dockerfile3.4.2容器启动命令3.5构建镜像docker1是什么Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置... 查看详情

docker基本实践(代码片段)

文章目录docker1是什么2常用命令3镜像3.1获取镜像3.2运行容器3.3列出镜像3.4脚本定制镜像3.4.1dockerfile3.4.2容器启动命令3.5构建镜像docker1是什么Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置... 查看详情

docker系列之基础实践篇(上)(代码片段)

 常用命令回顾帮助命令1.启动docker//启动$systemctlstartdocker2.查看docker版本$dockerversion3.查看安装的docker信息描述(容器多少,镜像多少等等)dockerinfo4.docker帮助命令(基本上docker的所有命令都有)docker--help此处比较长就不截图了,可... 查看详情

docker容器(代码片段)

@[TOC]Docker容器容器简介资源推荐Docker—从入门到实践github:https://github.com/yeasy/docker_practice非常详细的Docker学习笔记docker-imagecontainer基本操作-常用命令CENTOS:Docker安装centos容器基本概念Docker镜像(Image)是一个特殊的 查看详情

docker入门实践之dokerfile编写(代码片段)

Dockerfile是一个文本格式的配置文件,通过dockerfile可以快速创建自定义镜像以适应测试,预发布,生产环境等各种应用部署镜像,一个好的dockerfile可以让我们的镜像更方便管理以及应用。一.Dokerfile的基本结构Dockfile是由一行行命... 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi 查看详情

docker实践(代码片段)

Docker—从入门到实践https://yeasy.gitbooks.io/docker_practice/content/dockerpulldockerrundockerstopxxdockerrmxxdockercontainerprunedockerimagelsdockerps    查看详情

dockercompose实践(代码片段)

目录项目说明基本目录结构配置docker-compose项目说明这是一个典型的web项目,由一个haproxy容器加三个web容器组成。haproxy在前端充当负载均衡器,反向代理到后台三个服务服务。基本目录结构首先创建一个compose-haproxy-web的目录,... 查看详情

实践docker部署(代码片段)

实践Docker部署一键Docker安装可以使用如下两种命令之一,注意容器内东八区时间配置curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun或者curl-sSLhttps://get.daocloud.io/docker|sh常用服务1MySQL创建并更改配置文件/home/dockerFiles/mysql/conf 查看详情

docker从入门到实践系列五-dockerfile文件(代码片段)

文章目录什么是DockerFile文件DockerFile基本结构DockerFile指令详解1.FROM2.MAINTAINER3.RUN4.CMD5.COPY6.ENV7.ADD8.ENTRYPOINT9.VOLUME10.WORKDIR11.EXPOSEDockerFile创建镜像镜像管理DockerFile模版JDK镜像模版Docker数据持久化构建过程解析构建步骤基础知识Dockerfi... 查看详情

docker学习与实践(代码片段)

一、docker的安装1.依赖包安装yuminstall-yyum-utilsdevice-mapper-persistent-datalvm22.添加yum源yum-config-manager--add-repohttps://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repoyum-config-manager--enabled 查看详情

docker实践之01-入门介绍(代码片段)

目录一.Docker概述镜像容器仓库二.安装Docker1.在CentOS上安装Docker2.在Ubuntu上安装Docker3.启动docker4.建立Docker用户组5.测试Docker是否安装成功三.配置镜像加速器Ubuntu14.04/Debian7WheezyUbuntu16.04+/Debian8+/CentOS7一.Docker概述Docker是利用Linux内核... 查看详情

docker学习与实践(代码片段)

五、数据管理1.数据卷①创建一个数据卷[[email protected]~]#dockervolumecreatev1v1[[email protected]~]#dockervolumelsDRIVERVOLUMENAMElocalv1②查看数据卷信息[[email protected]~]#dockervolumelsDRIVERVOLUMENAMElocalv 查看详情

kubernetes实践指南(代码片段)

一、Docker相关内容二、Kubernets简介三、kuadm安装k8s一、Docker相关内容1、Docker工具集Docker三剑客:Compse、swarm、machinedockercompose:适用于单机,容器编排定义dockerswarm:对所有Docker宿主机资源整合,集群管理dockermachine:初始化Docker... 查看详情

docker学习与实践(代码片段)

四、仓库管理1.创建本地仓库①获取官方registry镜像[[email protected]~]#dockerrun-d-p5000:5000--restart=always--nameregistryregistry:2Unabletofindimage‘registry:2‘locally2:Pullingfromlibrary/registry81033e7c1d6a:Pullc 查看详情

docker实践:安装(代码片段)

...09;yum:推荐更新下yum:yumupdate;我们这边CentOS7自带docker,如果没有安装docker可以用yuminstalldocker来安装。启动命令启动docker: 查看详情

docker入门与实践(代码片段)

 一、Docker介绍docker官网:https://www.docker.com/Dockerhub地址:https://hub.docker.com/ 1、基本概念Docker是一个开源的应用容器引擎,基于Go语言 并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量... 查看详情