avatar

docker入门

什么是docker

Docker是一个开源的应用容器引擎,是一个轻量级容器技术;
Docker支持将软件编译成一个镜像,然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的。

Docker核心概念

  • docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
  • docker客户端(Client):连接docker主机进行操作;
  • docker仓库(Registry):用来保存各种打包好的软件镜像;
  • docker镜像(Images):软件打包好的镜像;放在docker仓库中;
  • docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

使用Docker的步骤:

  • 安装Docker
  • 去Docker仓库找到这个软件对应的镜像;
  • 使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
  • 对容器的启动停止就是对软件的启动停止;

安装Docker

在VirtualBox安装好CentOS系统

  • 查看CentOS版本
    Docker要求Centos系统的内核版本要高于3.10

    uname -r #查看Linux内核版本
    yum update #升级Linux软件包以及内核版本
  • 安装Docker

    yum install docker
  • 启动docker

    systemctl start docker #启动docker
    docker -v # 检查docker版本
    systemctl enable docker #docker设置开机启动
  • 停止docker

    systemctl stop docker  #将docker关掉

docker基本命令操作

docker阿里云镜像加速

1、登陆阿里云账号
2、找到容器镜像服务,点击管理控制台
3、找到镜像加速器,然后根据配置教程,配置自己的docker

镜像操作

操作 命令 说明
检索 docker search 关键字 eg:docker search redis 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。
拉取 docker pull 镜像名:tag :tag是可选的,tag表示标签,多为软件的版本,默认是latest
列表 docker images 查看所有本地镜像
删除 docker rmi image-id 删除指定的本地镜像

可以通过docker hub去找docker仓库。

# 检索
docker search mysql
# 拉取
docker pull mysql #这里可以写全名也可以写docker.io/后面的
docker pull mysql:5.7.19 #后面加冒号版本号可以下载指定版本号,不然是下载最新的。版本可以通过https://hub.docker.com/找到
# 查看所有镜像
docker images
# 删除镜像
docker rmi 8e8c6f8dc9df #rmi后面跟的是镜像的id号

容器操作

操作 命令 说明
运行 docker run –name container-name -d image-name
eg:docker run -name myredis -d redis
–name:自定义容器名
-d:后台运行
image-name:指定镜像模板
列表 docker ps(查看运行中的容器) -a 可以查看所有容器
停止 docker stop container-name/container-id 停止当前你运行的容器
启动 docker start container-name/container-id 启动指定容器
删除 docker rm container-id 删除指定容器
端口映射 -p 6379:6379
eg:docker run -d -p 6379:6379 –name myredis docker.io/redis
-p:主机端口(映射到容器内部的端口)
容器日志 docker logs container-name/container-id
更多命令 https://docs.docker.com/engine/reference/commandline/docker/

软件镜像—-运行镜像—-产生一个容器(正在运行的软件)

步骤:

1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]# docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest # 这样是无法访问的,因为外面访问是访问的虚拟机的8080端口,tomcat在docker中的8080,需要两者做映射
4、docker ps
查看运行中的容器
5、 停止运行中的容器
docker stop 容器的id
6、查看所有的容器
docker ps -a
7、启动容器
docker start 容器id
8、删除一个容器
docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:后台运行
-p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口

10、为了演示简单关闭了linux的防火墙
service firewalld status ;查看防火墙状态
service firewalld stop:关闭防火墙
11、查看容器的日志
docker logs container-name/container-id

#如果访问出现了404可能是tomcat的webapps目录不对,可能看篇文章进行修改:https://blog.csdn.net/weixin_44218159/article/details/104014126

更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
可以参考每一个镜像的文档

安装mysql

  • 从docker镜像拉下mysql

    docker pull mysql
  • 启动MySQL

    • 错误的启动方式:

      docker run --name mysql01 -d mysql

      这样指定以后,会发现mysql并没有启动起来,我们可以通过docker ps -a命令查看,发现mysql容器异常退出了,我们需要查看一下日志docker logs 容器id
      发现如下错误:

      Database is uninitialized and password option is not specified
      You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
      //这里说明的是mysql 要启动必须指明一些参数。不然启动会报错
    • 正确的启动方式

      docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql # 没有做端口映射无法使用
      docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql # 这样做了端口映射才可以实现

      这里可以参考docker官网对于mysql的配置:https://hub.docker.com/_/mysql
      然后我们使用mysql客户端连接工具就可以进行使用了

  • 使用自定义的mysql配置文件

    docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

    把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)

  • 使用命令的方式修改mysql配置

    docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    $ docker run -it --rm mysql:tag --verbose --help # 查看完整的属性列表

    指定mysql的一些配置参数

安装redis

  • 查找一下是不是有redis镜像
    docker search redis
  • 利用pull命令将官方镜像下载下来
    docker pull redis
  • 利用run命令运行redis
    docker run -d -p 6379:6379 --name myredis docker.io/redis
  • 利用docker ps看redis是否在运行
  • 使用redis连接工具Redis Desktop Manager连接使用

安装RabbitMQ

我们去docker hub上看一下rabbitMQ有哪些版本,这里选择下载带有management的版本,这种带有web的管理界面

  • pull命令下载
    docker pull rabbitmq:management
  • 我们运行rabbitMQ,因为带着管理界面,所以需要映射两个端口,5672是通信用的端口,15672是管理界面端口
    docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq a563e10677e8 #镜像id
  • 使用docker ps查看服务是不是起来了。
  • 打开ip:15672,就可以进入RabbitMQ的管理界面,用户名和密码都为guest

安装ElasticSearch

基本设置

  • 首先搜索镜像
    docker search elasticsearch
  • 将镜像下载下来
    docker pull elasticsearch
  • 运行镜像
    因为elasticsearch是用java写的,初始会默认占用2G的堆内存,所以我们做一些限制
    docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 elasticsearch
    # -e ES_JAVA_OPTS="-Xms256m -Xmx256m" 用来限定内存的
    # -p 9200:9200 使用的端口
    # -p 9300:9300 分布式集群通信的端口
  • 测试是否运行正常
    • 打开浏览器输入ip:9200,然后回车
    • 如果出现这段json数据,就算启动成功了
      {
      "name": "p-RQ13-",
      "cluster_name": "elasticsearch",
      "cluster_uuid": "KjpRMvibSLm6A-qaEzni-w",
      "version": {
      "number": "5.6.12",
      "build_hash": "cfe3d9f",
      "build_date": "2018-09-10T20:12:43.732Z",
      "build_snapshot": false,
      "lucene_version": "6.6.1"
      },
      "tagline": "You Know, for Search"
      }
  • 这样我们就可以正常使用了。

安装ZooKeeper

  • 直接搜索或者聪docker hub上进行查找
    docker search zookeeper
  • 镜像拉取
    docker pull zookeeper
  • 运行zookeeper
    docker run --name myzookeeper -p 2181:2181 --restart always -d zookeeper
    2181是客户端端口,2888是关注者端口,3888 是选举端口,8080是管理员端口
  • 检查是否运行成功
    docker ps
文章作者: zenshin
文章链接: https://zlh.giserhub.com/2020/04/01/docker/introduction/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 zenshin's blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论