Docker教程

BKivdvfg3A(csyFLMUoMF8%5($U1IWcp
一.安装Docker
有内核版本要求 大于等于3.10 以Centos7为例
Docker教程
文章图片
image.png 1.1 移除旧的版本:

$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

Docker教程
文章图片
image.png 1.2 安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

1.3 添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.4 更新 yum 缓存:
sudo yum makecache fast

1.5 安装 Docker-ce:
sudo yum -y install docker-ce

1.6 启动 Docker 后台服务
sudo systemctl start docker

Docker教程
文章图片
image.png
【Docker教程】)

Docker教程
文章图片
image.png 二.Docker基本命令
2.1 查看所有运行中镜像
docker ps

2.2 查看指定镜像输出
docker logs [id | name]

2.3 停止指定镜像
docker stop [id | name]

2.4 加载指定镜像
docker run

2.5 更多命令请查看命令帮助
docker --help docker --help

三.Dockerfile语法
Dockerfile可以分为四部分
  • 基础镜像信息
  • 创建者信息
  • 镜像操作指令
  • 启动执行指令
3.1 基础镜像信息
//FROM [:]基于指定镜像创建 FROM openjdk

3.2 创建者信息
MAINTAINER baojizhong指定创建者信息

3.3 镜像操作指令 3.3.1 两种格式
  • exec格式 ["sh","-c","echo","world"] 以下写作["command"]
  • shell格式 sh -c echo world 以下写作
区别: exec格式的命令不会调用任何shell,不会进行变量替换。
下面的命令大部分都同时支持这两种格式
3.3.2 USER命令
USER命令可以指定启动容器时的用户 默认是root
USER deamon// 指定用户为daemon

通常需要首先建立用户 使用RUN命令
3.3.3 RUN命令
RUN命令可以执行任何基础镜像支持的命令
RUN RUN ["command"] // 建立用户 RUN useradd lavi2510 RUN echo "lavi2510:0DayYouK" | chpasswd

3.3.4 CMD命令
CMD命令是在容器启动时执行的命令 只有最后一条生效 且会被docker run命令中的参数覆盖
CMD CMD ["command"] // 多条CMD只有最后一条生效 CMD echo "hello" CMD echo "world"

3.3.5 ENTRYPOINT命令
ENTRYPOINT命令是在容器启动时的命令,只有最后一条生效,不会被docker run命令中的参数覆盖 而是会将run命令或CMD ["command"]中的参数接在ENTRYPOINT命令后作为ENTRYPOINT命令的参数
ENTRYPOINT ENTRYPOINT ["command"] // 多条ENTRYPOINT只有最后一条生效 // run命令和CMD ["command"]都会为ENTRYPOINT命令提供参数 如下 CMD ["test"] ENTRYPOINT echo // 启动时实际执行为echo test

3.3.6 EXPOSE命令
EXPOSE命令可以指定要暴露的端口
EXPOSE [ ...] EXPOSE 8081 8082需要暴露8081,8082端口

3.3.7 ENV命令
ENV命令可以指定环境变量,可以被RUN指令获取,在容器运行时存在
ENV ENV JAVA_HOME /usr/local/java

3.3.8 ADD命令
ADD命令可以将指定的目录或文件(也可以是一个URL)拷贝到容器的指定目录下 如果是tar.gz会自动解压
ADD ADD docker-0.0.1.jar /home/lavi2510/lavi.jar

3.3.9 COPY命令
COPY命令相较于ADD命令,只能从本地拷贝,并且不会解压。如果以本地文件为目标,推荐使用COPY
COPY COPY docker-0.0.1.jar /home/lavi2510/lavi.jar

3.3.10 VOLUME命令
VOLUME命令会创建一个匿名VOLUME,将容器中的目录和host machine的某个目录绑定
VOLUME /lavi// 将容器中的/lavi目录绑定于host machine的某个目录 VOLUME my-volume:/lavi// 将容器中的/lavi目录与my-volume对应的目录绑定

3.3.11 WORKDIR命令
WORKDIR命令可以指定工作目录
WORKDIR /path/to/workdir

四.启动一个SpringBoot项目
dockerfile
FROM openjdk MAINTAINER baojizhong ENV JAVA_HOME /usr/local/java ADD proxy-service-kafka-1.0.0.jar /home/proxy.jar WORKDIR /home EXPOSE 8000 ENTRYPOINT ["java","-jar","/home/proxy.jar"]

将dockerfile和proxy-service-kafka-1.0.0.jar放在同一目录下
编译镜像
docker build -t proxy/kafka .

创建镜像
docker run -p 0.0.0.0:8000:8000 --name proxyproxy/kafka --spring.profiles.active=dev --registry.host=10.90.101.43 --registry.port=8000 --proxy.type=producer

    推荐阅读