一篇文章让你 Docker 入门

Docker

  • Docker 概述
  • Docker 安装
  • Docker 命令
    • 镜像命令
    • 容器命令
    • 操作命令
  • Docker 镜像
  • 容器的数据卷
  • DockerFile
  • Docker 网络原理
  • idea 整合 Docker
  • Docker Compose
  • Docker Swarm
  • Cl\CD jenkins

Docker 概述

Docker 为什么会出现

  • 环境配置是非常麻烦的
  • 在我的电脑上可以运行,在你的电脑无法运行
  • 打包部署无法直接运行

Docker 应运而生

  • Docker 的思想来自于集装箱
  • Docker通过隔离机制,将服务器利用到极致

image-20200806094803373

image-20200806095042373

Docker的安装

  • 先去 Docker 官方文档 Docker 官方文档
  • 点击 Download and install
  • 选择你的系统版本**,Windows Linux mac** 都可以,其中会有教程教你一步步下载

以cent os7为例

  • 卸载原来的Docker 如果没有则忽视
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  • 安装相关依赖
yum install -y yum-utils
  • 设置默认镜像并下载DOCKER
yum-config-manager \
    --add-repo \
   # https://download.docker.com/linux/centos/docker-ce.repo 不使用默认的镜像地址
   
   yum-config-manager \
    --add-repo \
   https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云

#下载docker   
 yum install docker-ce docker-ce-cli containerd.io
 

  • 启动docker
systemctl start docker
  • 查看docker版本(如果可以查看则已经启动成功)
docker --version

image-20200806102920569

  • 下载Holle-world镜像(测试镜像源是否正确)
docker run hello-world

image-20200806103155943

  • 查看镜像
docker images

image-20200806103254836

  • 卸载docker
yum remove docker-ce docker-ce-cli containerd.io //卸载docker
rm -rf /var/lib/docker //删除docker默认工作路径

常用Docker 命令


帮助命令

docker vesion # 查看版本
docker info   # 查看docker 信息
docker -- help # 帮助命令

镜像命令

docker images --help # 查看镜像常用命令

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs

docker images # 查看镜像
REPOSITORYTAGIMAGE IDCREATEDSIZE
镜像的仓库源标签镜像的id创建的时间镜像的大小
docker search 镜像名   #搜索镜像
docker search 镜像名 --filter=STARS=3000  # 搜索出star 数大于三千的目标

image-20200806121809277

docker pull 镜像名 # 下载目标镜像,默认最新版本
docker pull 镜像名:版本 # 选择版本下载

docker rmi -f 镜像id #删除指定的镜像

docker images -aq # 查找所有镜像id

docker rmi -f $(docker images -aq) #删除所有镜像

容器命令

下载镜像centos为例

docker pull centos # 下载centos 镜像

docker run[参数] image
# 参数说明
--name="Name" # 容器名字 ,用来区分容器
-d # 后台方式运行
-it # 使用交互方式运行,进入容器查看内容
-p # 指定容器端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口
	-p 容器端口
	
docker run -it -rm tomcat # 用完即删	
  • 启动镜像,进入容器 的命令端

image-20200806192448711

  • 输入exit 退出容器,并且停止。

image-20200806192651473

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

image-20200806192845489

docker ps -a # 查看曾经运行的容器

image-20200806192942738

docker ps -a -n=1 # 查看最近创建的容器

image-20200806193234651

docker ps -aq # 显示所有容器编号

ctrl + p + q # 退出容器,不停止
  • 删除容器
docker rm 容器id # 删除容器
docker rm -f $(docker ps -aq) # 删除所有容器

  • 启动和停止容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止容器
docker kill 容器id # 强制停止容器

常用的进阶命令

  • 后台启动

    docker run -d 镜像 
    # 启动后发现无前台进程,会自动立刻停止
    
  • 查看日志

docker logs --help # 查看日志相关命令

image-20200806195357513

  • 查看容器中的进程信息
docker top 容器id
  • 查看容器源数据
docker inspect 容器id 
  • 进入当前正在运行的容器
docker exec -it 容器id  /bin/bash

docker attach 容器id 

# 区别 
# docker exec 进入容器后开启一个新的终端 
# 进入容器正在执行的终端,不会启动新终端
  • 从容器内拷贝文件到主机
docker cp 容器id:主机拷贝到的地址

总结

image-20200806201218580

Docker 安装 nginx

  • 查询一下 nginx
docker search nginx

image-20200806201955782

  • 下载 nginx 镜像
docker pull nginx

image-20200806202051106

  • 查看安装的镜像
docker images

image-20200806202116272

  • 后台运行nginx 镜像 别名为 nginx01 主机端口3344映射容器端口80
docker run -d --name nginx01 -p 3344:80 nginx

image-20200806202208472

  • 查看 nginx 运行成功后的页面

image-20200806202249824

  • 由于以上操作都是我在阿里云服务器上的操作 ,因此我可以通过外网+端口直接访问(端口一定是开放状态)。

image-20200806203038140

Docker 可视化界面管理

docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
  • 浏览器访问如果你是本地运行的,直接 localhost:8088 ,如果是服务器上就服务器ip+端口(图形化界面用的少,可以忽略)

image-20200806210518005

Docker镜像详解


镜像是啥?

镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码,库,环境变量,配置环境等。


Docker 镜像加载原理

UnionFs (联合文件系统)

image-20200806211504915

Docker镜像加载原理

image-20200806211614021

  • 特点:Docker 镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像顶部,这一层叫做容器层,下面的都是镜像层。

COMMIT 镜像

docker commit #提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]

容器数据卷

什么是容器数据卷?

容器之间数据共享!Docker 容器产生的数据,同步到本地!

特点:持久化和同步操作,容器间的数据共享。

数据卷的使用

方法一

docker run -it -v 主机目录:容器目录 容器名  # 两者目录同步
  • 启动镜像centos 并将主机的 home/ceshi 映射到容器 内 /home
  • image-20200807102351638
  • 然后退出容器 ctrl + p + q
  • 查看容器 centos 源数据

image-20200807102649667

  • 找到下面代码,可以看到我们的地址挂载成功
"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/ceshi",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],


  • 挂载成功后 ,你在容器home内的一切文件都会同步到你的主机/home/ceshi中,主机中的一切文件也会同步到容器中。

image-20200807104509568

具名挂载和匿名挂载

具名
docker run -it -v 数据卷名字:容器目录 容器名  # 默认保存在  /var/lib/docker/volumes/数据卷名字
匿名
docker run -it -v 容器目录 容器名  # 默认保存在  /var/lib/docker/volumes/随机名字

设置可读可写

docker run -it -v 本地目录:容器目录:ro 容器名 # 只写
docker run -it -v 本地目录:容器目录:rw 容器名 # 可读可写,默认

使用 --volumes -from

docker run -it --name docker01 --volumes -from 容器二 镜像名
# 不同容器间数据卷共享

Docker mysql数据同步实战

具体mysql镜像下载配置可以去 docker hub 搜索 mysql查看

https://hub.docker.com/

  • 先下载mysql镜像

image-20200807105157693

  • 启动mysql,同时挂载相关地址。启动后就可以直接连接你的数据库了
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql初始密码 --name mysql01 mysql:5.7
  • 在主机下的home目录也可以查看到mysql容器内的内容

image-20200807111119251

  • 删除容器后,查看主机mysql数据,依旧存在。

image-20200807111316525

Dockerfile

Dockerfile 就是用来构建docker 镜像的构建文件命令脚本。

通过脚本可以生成镜像

# 创建一个dockerfile文件并写
vim dockerfile1
# 文件内容
FROM centos    # 基础镜像
VOLUME ["挂载目录名","挂载目录名"] #镜像生成容器后,容器内部会有相对应的目录与主机目录挂载
CMD echo "生成后发送的文字"
CMD /bin/bash # 生成后进入
# 保存后退出

# 生成镜像
docker bulid -f dockerfile文件路径 -t 生成镜像名字:版本 . #点的意思是在当前路径下生成

基础知识

  • 每个关键字都是大写字母

  • 执行从上到下

  • #注释

  • 每一个指令都是一个镜像层

    image-20200807143530279

  • 如下图

image-20200807144920104

  • 然后运行指令
docker build -f mydockerfile -t mycentos:0.1 .  # 中间的mydockerfile是文件名 
  • 生成镜像成功

image-20200807145110625

  • 查看某镜像构建历史
docker history 镜像id

image-20200807150400022

制作Tomcat 镜像

  • 创建文件Dockerfile 官方默认文件名字,等下构建时可以省略文件名。
  • vim Dockerfile 添加如下代码
FROM centos
MAINTAINER zzzyuan

COPY readme.txt /usr/local/readme.txt
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.37.tar.gz /usr/local/

RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin


EXPOSE 8080

CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /u/usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out 

  • 构建镜像
docker build -t diytomcat .
  • 运行镜像
docker run -d -p 9090:8080 --name mytomcat01 -v /home/yuan/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test -v /home/yuan/tomcat/logs:/usr/local/apache-tomcat-9.0.37/logs diytomcat
  • 运行后可以直接访问 路径为ip + 端口

image-20200807163025127

发布自己的镜像

  • 先去Dockerhub注册一个自己的账号https://hub.docker.com/
  • 在主机上登录自己的账号
docker login -p 密码 -u 账号

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username

docker -logout # 退出账号
  • 提交自己的镜像
docker tag 镜像id 作者/镜像名:版本号 # 修改镜像名,防止重复
docker push 镜像名:版本 # 提交镜像

总结

image-20200807170848727

Docker 网络(延伸)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杂货店的阿猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值