Docker教程

BKivdvfg3A(csyFLMUoMF8%5($U1IWcp

一.安装Docker

有内核版本要求 大于等于3.10 以Centos7为例

Docker教程_第1张图片
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
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教程_第2张图片
image.png

)


Docker教程_第3张图片
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 proxy  proxy/kafka --spring.profiles.active=dev --registry.host=10.90.101.43 --registry.port=8000 --proxy.type=producer

你可能感兴趣的:(Docker教程)