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 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 了,能够把项目容器化,并且运行。
标签:容器,基本上,学习,nginx,usr,镜像,Docker,docker 来源: https://blog.csdn.net/weixin_41793772/article/details/115425387