Docker学习-基本上手操作

学习目标

  • 了解 Docker
  • 会操作 Docker 拉取、上传镜像、运行容器
  • 会编写简单的 Dockerfile

Docker 简介

参考链接:阮一峰Docker 入门教程

Docker 是什么

**Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。**它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

Docker 解决的问题

环境配置问题:Docker 带环境安装,安装的时候,把原始环境一模一样地复制过来。不用操作系统和各种库、组件

Docker 的用途

Docker 的主要用途,目前有三大类。

**(1)提供一次性的环境。**比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。

**(2)提供弹性的云服务。**因为 Docker 容器可以随开随关,很适合动态扩容和缩容。

**(3)组建微服务架构。**通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

安装Docker

基于 CentOS

  • 设置仓库(下载更快):

    sudo yum-config-manager \
        --add-repo \
        http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 安装最新版本的 Docker Engine-Community 和 containerd

    sudo yum install docker-ce docker-ce-cli containerd.io
    
  • 更多安装参考:菜鸟教程

镜像(image)操作

**Docker 把应用程序及其依赖,打包在 image 文件里面。**只有通过这个文件,才能生成 Docker 容器。

# 列出本机所有的 image 文件
docker images

查看所有 Docker 镜像

# 从Docker Hub查找镜像
docker search [ImageName]

在这里插入图片描述

# 拉取镜像实列:hello-world
docker pull [ImageName]:[ImageTag]
没有指定 ImageTag,默认是 latest

在这里插入图片描述

# 再次查看本地镜像列表
docker images
本地已经拉取 hello-world 镜像成功

在这里插入图片描述

# 删除镜像
# 删除镜像之前,必须没有容器引用此镜像
docker rmi [image]

容器(container)操作

# 运行镜像 hello-world
docker run hello-world 
出现下图则是运行成功。输出这段提示以后,hello world就会停止运行,容器自动终止。

在这里插入图片描述

# 查看正在运行的容器文件
docker ps 
# 查看所有的容器文件
docker ps -a

在这里插入图片描述

# 删除容器
# 删除的时候,你的容器需要先停止
docker rm [container]

Dockerfile 文件

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

**制作自己的 Docker 容器

  • 准备自己的应用 jar 包

  • 编写 Dockefile 文件

    # 该 image 文件继承仓库中下载的 jdk8 这里没有指定标签,默认是 latest 
    FROM openjdk:8-jdk-alpine 
    # 将本机当前的目录的 apicreator.jar 添加到镜像文件 opt 目录下,并重命名为 api.jar
    ADD 你的jar包.jar /opt/api.jar
    # 设置镜像工作路径,进入容器默认的路劲就是 /opt
    WORKDIR /opt
    # 在 /opt 目录下执行下面这条语句(这是在容器启动的时候才会执行的语句)
    ENTRYPOINT ["java","-jar","api.jar"]
    
  • 制作镜像

    # -t参数用来指定 image 文件的名字
    # . 表示 Dockerfile 文件所在的路径(当前路径)
    docker build -t [ImageName] .
    
  • 生成容器

    docker run -d --name [containerName] -p 8099:8082 [ImageName]
    
    containerName:自己定义的名字
    ImageName:引用的镜像名字
    -d:容器运行于后台
    --name:指定容器的名称
    -p:映射端口(本机的 8099 端口映射到容器的 8082 端口)
    

    如果正常会返回一个SHA256 字符串;此时打开浏览器,已经可以正常访问容器应用了。

  • 进入容器

    docker exec -it [containerName] /bin/bash(sh)
     可以使用 /bin/bash  或者 sh 
    -it:容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器
    /bin/bash:容器启动以后,内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell。
    

tip:容器是否正常运行

# 查看当前正在运行的容器
docker ps 
# 查看运行容器的日志
docker logs [container]

上传镜像

  • 登录镜像仓库
    sudo docker login --username=[用户名] [ip]
    
  • 推送镜像
    $ sudo docker tag [ImageId] [ip]/[目录]/[ImagesName]:[ImageTag]
    $ sudo docker push [ip]/[目录]/[ImagesName]:[ImageTag]
    

推送镜像,就是一个上传的过程,像ftp一样,把你本地的东西上传到远程服务器

更多用法

修改容器并生成新的镜像

# 进入容器
docker exec -it [container] bash
# 将本地修改好的文件移动到容器中 
docker cp 本机路径 container:容器路径
# 从容器创建一个新的镜像(这里的commit,像是git的commit,哈哈)
docker commit -m '22' [container] [new ImageName]
# 查看新生成的镜像
docker images

较复杂的 Dockerfile

背景:打 Nginx 镜像:nginx.conf 配置文件需要修改

Dockerfile

# 基础镜像
FROM centos
# 编译nginx环境
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib  
# 添加当前目录的 Nginx 包到镜像 /usr/src/ 路径下
ADD nginx-1.17.9.tar.gz /usr/src/
# 添加容器执行脚本 add 添加之后,会自动解压,copy 不会自动解压,只是把文件复制过去而已
ADD run.sh /usr/src/ 

# 编译安装 Nginx 
RUN cd /usr/src/nginx-1.17.9 \
    && mkdir /usr/local/nginx \
    && mkdir -p /data/disk2/cxzx_datafile \
    && ./configure --prefix=/usr/local/nginx && make && make install \
    && ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ \
    && nginx
RUN rm -rf /usr/src/nginx-1.17.9

#本地修改的配置文件,直接放到镜像中
ADD nginx.conf /usr/local/nginx/conf/ 
#赋权,镜像启动需要权限
RUN chmod 777 /usr/src/run.sh 
# 容器对外暴露的端口
EXPOSE 8030 
# 执行脚本
CMD ["/usr/src/run.sh"]

run.sh

#!/bin/bash
#设置 nginx 非 daemon 守护进程
echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
# 指定配置文件启动 nginx 服务
/usr/local/nginx/sbin/nginx -c  /usr/local/nginx/conf/nginx.conf

Docker 命令集合

参考链接

容器生命周期管理run
start/stop/restart
rm
exec
容器操作ps
inspect
logs
export
容器rootfs命令commit
cp
diff
镜像仓库login
pull
push
search
本地镜像管理images
rmi
build
save
load
import
版本信息info
version

总结

本文是自己在工作中实际操作总结的,这是很不完善的,只是刚刚好把基本的操作(差不多满足一般的需求)记录下来。
比如一个Dockerfile中还有很多其他命令:指定镜像的作者啊、如何优化Docker 镜像体积啊等等,都没有提及。但是基本上,按照这些可以简单的使用 Docker 了,能够把项目容器化,并且运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值