首页 > 其他 > 详细

Docker入门上手

时间:2021-01-25 11:31:38      阅读:18      评论:0      收藏:0      [点我收藏+]

Docker入门上手

1. Docker概述

Docker一次构建可放在任何地方运行,不需要进行任何改变,Docker就类似于一个容器。这个容器就好像常用的虚拟机一样,当我们虚拟机里面安装过VS、SQL、浏览器...之后咱们就把虚拟机镜像备份下来、等到下一次需要冲新搭一个环境的时候,就可以省去很多事情了,直接把备份的虚拟机运行起来,该有的就都有了,省去了很多事情。

在用Docker的情况下,我们可以直接把项目发布在Docker容器上面进行测试,当项目需要正式上线的时候,我们可以直接把做好的Docker镜像部署上去,如果测试的好,就不必担心项目上正式上线的时候出问题(比如Config配置信息,很多项目都是测试环境地址,正式环境地址,但是用过Docker之后就一个就行了)Docker可以在云、Windows、Linux等环境上进行部署,这一点就省去了很多费用、降低了项目部署上线的风险,不必每次项目上线都留守一堆人才等着项目报错。

我们写的代码会接触到好几个环境:开发环境、测试环境、以及生产环境等等。多种环境去部署同一份代码,由于环境原因往往会出翔软件跨环境迁移问题(也就是水土不服

技术分享图片

针对这种问题如何解决?我们可以将工程及此工程以来的所有软件打包到一个容器中统一部署

技术分享图片

1.1 docker概念

  • Docker是一个开源的应用容器引擎
  • 诞生于2013年初,基于Go语言实现,dotCloud公司出品(后改名为Docker Inc)
  • Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上。
  • 容器是完全使用沙箱机制的,相互隔离
  • 容器性能开销极低
  • Docker从17.03版本之后分为CE(Community Edition:社区版)和 EE(Enterprise Edition:企业版)

1.2 安装docker

Docker可以运行在Mac、Windows、Centos、Ubuntu等操作系统上,ubuntu安装如下(官网: https://www.docker.com ):

# 1.unload原有的docker
sudo apt-get remove docker docker-engine docker-ce docker.io
sudo apt-get update
# 2. apt-get可以使用的https库
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
# 3. 添加docker的使用的公钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 4. 添加docker的远程库
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
# 5. 安装docker-ce
sudo apt-get install -y docker-ce
# 6. 启动docker
systemctl status docker
# 7. 运行hello-world
sudo docker run hello-world
# 8. 查看docker版本,验证是否成功
docker -v
链接:https://www.jianshu.com/p/bafa48ebd55e
========================================普通用户=========================================
# 查看用户组及成员
sudo cat /etc/group | grep docker
# 可以添加docker组
sudo groupadd docker 
 # 添加用户到docker组 
sudo gpasswd -a ${USER} docker 
# 增加读写权限
sudo chmod a+rw /var/run/docker.sock
# 重启docker
sudo systemctl restart docker 
sudo service docker restart
newgrp - docker

1.3 docker架构

1.3.1 docker结构

技术分享图片

docker使用流程:

  1. 配置docker进程

  2. 从仓库下载镜像到宿主机

  3. 通过镜像创建容器并启动

1.3.2 配置镜像加速

默认情况下,从docker hub( https://hub.docker.com/ )上下载docker镜像,太慢。一般都会配置镜像加速器:

找到 阿里云-镜像加速服务

技术分享图片

(1) 创建文件并配置

在linux中自己创建:/etc/docker/daemon.json文件,并导入镜像地址(二选一)

中科大镜像地址
{
	"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
阿里云镜像地址
{
	"registry-mirrors":["https://rydgq3cf.mirror.aliyuncs.com"]
}

(2) 重新启动docker

# 重启
syatemctl restart docker
# 查看docker信息
docker info

2. Docker的命令(重点)

2.1 进程相关命令

docker 进程:daemon(docker软件(服务))

# 启动docker服务
systemctl start docker
# 停止docker服务
systemctl stop docker
# 查看docker服务状态
systemctl status docker
# 设置开机启动docker服务:
systemctl enable docker

2.2 镜像相关命令

镜像:需要的软件(从仓库中下载(docker hub))

# 查看镜像
docker images
docker images -q # 查看所有镜像的id
# 搜索镜像:从网络中查找需要的镜像
docker search 镜像名称
# 拉取镜像:从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。
docker pull 镜像名称
# 删除镜像:删除本地镜像
docker rmi 镜像id # 删除指定本地镜像
docker rmi $(docker images -q) # 删除所有本地镜像

2.3 容器相关命令

容器:通过镜像启动的容器

# 查看容器
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器
# 创建并启动容器
docker run 参数
# 交互式创建容器:创建并启动容器,进入容器内部,通过exit退出容器(关闭容器)
docker run -it --name=my_cs1 centos:7 /bin/bash
# 守护式创建容器:创建并后台启动容器,不会进入到容器内部
docker run -id --name=my_cs2 centos:7
# 交互式 docker run -it --name=my_c1 centos:7 /bin/bash
# 守护式 docker run -it --name=my_c2 centos:7
# 进入容器
docker exec -it 容器名称 /bin/bash # 退出容器,容器不会关闭
# 停止容器
docker stop 容器名称
# 启动容器
docker start 容器名称
# 删除容器
docker rm 容器名称
# 查看容器信息
docker inspect 容器名称

参数说明:

  • -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
  • -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入容器。推出后,容器不会关闭
  • -it:创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
  • --name:为创建的容器命名

3. Docker应用部署(重点)

3.1 数据卷

思考

  • Docker 容器删除后,在容器中产生的数据也会随之销毁
  • Docker 容器和外部机器可以直接交换文件吗?
  • 容器之间如何进行数据交互?

技术分享图片

3.1.1 概念及作用

什么是数据卷

数据卷是宿主机中的一个目录或文件,当容器目录和数据目录绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂在,一个容器也可以被挂在多个数据卷。

数据卷作用

容器数据持久化、外部机器和容器间接通信、容器之间数据交互

3.1.2 配置数据卷

创建容器时,使用 -v 参数设置数据卷

# 启动容器,挂载数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件) ...

技术分享图片

# 启动容器,挂载数据卷
docker run -id --name=my_c1 -v /home/data/:/usr/data/ centos:7
# 进入容器
docker exec -it my_c1 /bin/bash
# 查看共享文件,效果为双向绑定,且数据持久化

3.2 Redis部署

3.2.1 端口映射

技术分享图片

3.2.2 redis部署

需求:在Docker容器中部署redis,并通过外部机器访问Redis

操作步骤

# 搜索镜像
docker search redis
# 拉取镜像
docker pull redis
# 创建容器
docker run -id --name=my_redis -p 6379:6379 redis:5.0

参数解释:

-p: 设置映射端口,宿主据端口:容器端口

3.3 tomcat部署

需求: 在Docker容器中部署Tomcat,并通过外部机器访问Tomcat部署的项目

docker run -id --name=my_tomcat -p 8080:8080 tomcat

3.4 nginx部署

需求: 在Docker容器中部署Nginx,并通过外部机器访问Nginx

docker run -id --name=my_nginx -p 80:80 nginx

3.5 mysql部署

需求: 在Docker容器中部署Mysql,并通过外部mysql客户端(SQLyog)操作Mysql Server

docker run -id --name=my_mysql -p 3307:3306 -v /home/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7

4. DockerFile

4.1 DockerFile介绍

dockerfile是用来构建docker镜像的文件!是命令参数脚本!

构建步骤:

  1. 编写一个dockerfile 文件
  2. docker build 构建成为一个镜像
  3. docker run 运行镜像
  4. docker push 发布镜像(DockerHub/、阿里云镜像仓库)

技术分享图片

技术分享图片

很多官方镜像都是 基础包,很多功能没有,我们通常会自己搭建自己的镜像!

官方既然可以制作镜像,那我们也可以!

4.2 DockerFile构建过程

基础知识

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行从上到下顺序执行
  3. 表示注释

  4. 每一个指令都会创建提交一个新的镜像层,并提交!

技术分享图片

dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件,这个文件十分简单!

Docker镜像逐渐成为企业交付的标准,我们必须掌握!

步骤:开发、部署、运维 缺一不可!

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过 DockerFile 构建生成的镜像,最终发布和运行的产品

Docker容器:容器就是镜像运行起来提供服务器

4.3 DockerFile的指令

以前我们是用别人的镜像,现在我们可以自己制作镜像了!

FROM					# 基础镜像,一般从这里开始构建
MAINTAINER				# 镜像是谁写的,姓名,邮箱
RUN					 	# 镜像构建的时候需要运行的命令
ADD						# 步骤,tomcat镜像,这个tomcat压缩信息!添加内容
WOEKDIR					# 镜像的工作目录
VOLUME					# 挂载的目录
EXPOSE					# 暴露端口
CMD						# 指定这个容器启动的时候要指令的命令,只有最后一个会生效,且可以被替代
ENTRYPOINT				# 指定这个容器启动的时候要指令的命令,可追加命令
ONBUILD					# 当构建一个被继承的 DockerFIle 这个时候就会运行 ONBUILD 的指令,触发指令
COPY 					# 类似ADD,将我们文件拷贝到镜像中
ENV						# 构建的时候设置环境变量

技术分享图片

4.4 实战测试

Docker Hub 中,99%的镜像都是从这个基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行的构建。

创建一个自己的centos

# 1. 编写Dockerfile的文件
FROM centos
MAINTAINER caoshikui<shikuicao@163.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "-----end----"
CMD /bin/bash

# 2. 通过这个文件构建镜像,最后的点一点不要忘记!!!!
# 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] .
Successfully built 54e21e6b766c
Successfully tagged my_centos:1.0

查看一个镜像的创建过程

docker history 镜像id

CMD 与 ENTRYPOINT 区别

CMD			# 指定这个容器启动的时候要指令的命令,只有最后一个会生效,且可以被替代
ENTRYPOINT	# 指定这个容器启动的时候要指令的命令,可追加命令

测试cmd

# 编写dockerfile文件
vim dockerfile-cmd-test
FROM centod
CMD ["ls","-a"]
# 构建镜像
docker build -f dockerfile-cmd-test -t cmdtest .
# run运行 发现我们的 ls -a 命令生效
docker run 镜像id
.
..
.dockerenv
bin
etc
home
lib
lib64

# 想追加一个命令 -l	ls -al
docker run 镜像id -l	报错了
#  在cmd的情况下 -l 替换了CMD["ls","-a"] 命令, -l 不是命令所以报错!

测试ENTRYPOINT

# 编写dockerfile文件
vim dockerfile-cmd-entrypoint
FROM centos
ENTRYPOINT ["ls","-a"]

# 构建镜像
docker build -f dockerfile-cmd-entrypoint -t entrypoint-test .
# run运行 发现我们的 ls -a 命令生效
docker run 镜像id
.
..
.dockerenv
bin
etc
home
lib
lib64
# 想追加一个命令 -l	ls -al ,追加的命令直接拼接在 ENTRYPOINT 的命令中
docker run 镜像id -l	
成功运行!

Dockerfile中很多命令都十分的相似,我们需要了解他们的区别,最好的学习就是对比他们然后测试效果!

4.5 实战2:Tomcat镜像

1、准备镜像文件 tomcat 压缩包、jdk 的压缩包

技术分享图片2、编写dockerfile文件,官方命名为 Dockerfile,build 会自动寻找这个文件,就不需要 -f 指定了

FROM centos
MAINTAINER caoshikui<shikuicao@163.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u271-linux-x64.tar.gz /usr/local/
ADD tomcat.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_271
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CLASSPATH_HOME /usr/local/apache-tomcat-9.0.41
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.41
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.41/bin/starup.sh && tail -F /usr/local/apache-tomcat-9.0.41/bin/logs/catalina.out

3、 构建镜像

docker build -t tomcat-jdk:1.0

4、 启动镜像

4.6 发布自己的镜像到 Docker Hub

Docker Hub

  1. 地址 https://hub.docker.com/ 注册自己的账号

  2. 确定这个账号可以登录

  3. 在我们服务器上提交自己的镜像

    root@aliyun:/home# docker login --help
    
    Usage:  docker login [OPTIONS] [SERVER]
    
    Log in to a Docker registry.
    If no server is specified, the default is defined by the daemon.
    
    Options:
      -p, --password string   Password
          --password-stdin    Take the password from stdin
      -u, --username string   Username
    
  4. 登录完毕后就可以提交镜像了,就是一步 docker push

    技术分享图片

    修改镜像标签:docker tag 6ba49b7265f0 caoshikui/diytomcat:1.0

    技术分享图片

    成功!

    可以看到,提交的时候也是按照镜像层级提交

4.7 发布镜像到阿里云服务器上

1、 登录阿里云

2、 找到容器镜像服务

3、 创建命名空间

技术分享图片

4、 创建镜像仓库

技术分享图片

5、 浏览阿里云

技术分享图片

按照提示步骤推送镜像到阿里云仓库即可

5. 小结

技术分享图片

技术分享图片

6. Docker服务编排(了解)

服务编排:批量管理所有容器

6.1 服务编排

微服务建构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。

  • 要从 Dockerfile build image 或者去 dockerhub 拉取 image
  • 要创建多个container
  • 要管理这些container(启动停止删除)

服务编排: 按照一定的业务规则批量管理容器

6.2 Docker Compose 概述

Docker Compose是要给编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。使用步骤:

  1. 利用 Dockerfile 定义运行环境镜像
  2. 使用 docker-compose.yml 定义组成应用的各服务
  3. 运行 docker-compose up 启动应用

技术分享图片

6.3 安装

6.3.1 安装 Docker Compose

# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。 
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限 
chmod +x /usr/local/bin/docker-compose
# 查看版本信息 
docker-compose -version

6.3.2 卸载 Docker Compose

# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose

6.4 案例

  1. 创建 Docker-compose 目录

    mkdir docker-compose
    cd docker-compose
    
  2. 定义 docker-compose.yml 文件

    version: ‘3‘
    services:
      nginx:
       container_name: my_nginx
       image: nginx
       ports:
        - 80:80
      tomcat:
       container_name: my_tomcat
       image: tomcat
       ports:
        - 8080:8080    
      redis:
       container_name: my_redis
       image: redis
       ports:
        - 6379:6379
    
  3. 启动容器

    docker-compose up -d
    

Docker入门上手

原文:https://www.cnblogs.com/caoshikui/p/14323639.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!