docker 杂记

1. docker 安装

step 1: 安装必要的一些系统工具

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Step 2: 添加软件源信息

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Step 3: 更新并安装 Docker-CE

sudo yum makecache fast
sudo yum -y install docker-ce

Step 4: 开启Docker服务

sudo service docker start

注意使用yum安装软件时出现如下错误

http://mirrors.163.com/centos/5/os/i386/repodata/repomd.xml: [Errno 14] HTTP Error 404: Not Found
Trying other mirror.

执行如下命令

yum clean all
yum makecache
yum update

2. 什么是docker

简单的认为docker 就是一个虚拟机。但架构不用于虚拟机
docker vs 虚拟机
在这里插入图片描述

A container runs natively on Linux and shares the kernel of the host machine with other containers. It runs a discrete process, taking no more memory than any other executable, making it lightweight.

By contrast, a virtual machine (VM) runs a full-blown “guest” operating system with virtual access to host resources through a hypervisor. In general, VMs provide an environment with more resources than most applications need.

官方解释翻译过来大概内容是docker 是直接运行在宿主机的内核上,在docker上面的各种容器是共享内核的。与之相反的是虚拟机(vm)通过hypervisor技术来虚拟出多个内核出来,比docker需要更多的资源。一句话docker比vm更轻量级

3. docker 运行的常用的容器命令

jenkins
docker run \
 --name jenkins\
 -d \
 --rm \
 -u root \
 -p 8686:8080 \
 -v /data/jenkins/jenkins-data:/var/jenkins_home \
 -v /data/jenkins/run/docker.sock:/var/run/docker.sock \
 -v /data/jenkins/home:/home \
 jenkinsci/blueocean

注意:
–name 制定容器名
-u root 指定用户
-d 后台运行
-v volumn映射 host机器路径:container 路径
-p 端口映射 host机器端口:container 端口

Activemq
docker run --name activemq \
 -d\
 -v /data/activemq:/data/activemq \
 -v /data/activemq/conf:/opt/activemq/conf\
 -v /data/activemq/log:/var/log\
 -p 61616:61616\
 -p  8161:8161\
 webcenter/activemq 
Zookeeper
docker run \
--name zookeeper \
--hostname zookeeper \
--restart always -d \
-p 2181:2181 -p 2888:2888 -p 3888:3888 \
-v /data/zk/conf:/conf \
-v /data/zk/data:/data \
-v /data/zk/datalog:/datalog \
zookeeper
Mysql
docker run -p 3306:3306 \ 
--name mysql \
 -v $PWD/conf:/etc/mysql/conf.d \
 -v $PWD/logs:/logs \
 -v $PWD/data:/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=devuser \
 -d mysql:latest
  • -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
  • -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。
  • -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
  • -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
  • -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
Redis
docker run  --name redis \
-p 6379:6379 \
-v /data/redis/data:/data \
--appendonly yes \
-d redis:3.2  

4. docker配置加速镜像

上面的命令运行时候回去下载镜像,在国内下载的速度很慢,可以配置镜像

修改/etc/docker/daemon.json,加入

{
        "registry-mirrors": [
                "http://hub-mirror.c.163.com"
        ],
         "storage-driver": "devicemapper"
}

systemctl daemon-reload
systemctl restart docker.service

或者

修改或新增 /etc/sysconfig/docker

OPTIONS='--selinux-enabled --log-driver=journald --registry-mirror=http://hub-mirror.c.163.com'

以上是网上搜到的2种解决的,但我本地不知道为什么都不生效,所以采用第三种,到
https://hub.daocloud.io/查到需要的的容器,例如 elasticsearch
在这里插入图片描述

5. docker 如何知道容器里的参数

docker run 命令执行的时候,需要传入参数,有时候不知道参数是什么。
比如 activemq

docker run --name activemq 
 -d
 -v /data/activemq:/data/activemq 
 -v /data/activemq/conf:/opt/activemq/conf
 -v /data/activemq/log:/var/log
 -p 61616:61616
 -p  8161:8161
 webcenter/activemq 

如何知道 activemq里的volumn 是 /data/activemq,又如何知道它有哪些端口

可以先默认的docker run --name myactivemq webcenter/activemq 先执行一个后
执行

docker inspect myactivemq 

就可以从Config节点获取到,如下

"Config": {
            "Hostname": "3d8ee09e3acb",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
                "1883/tcp": {},
                "5672/tcp": {},
                "61613/tcp": {},
                "61614/tcp": {},
                "61616/tcp": {},
                "8161/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "ACTIVEMQ_CONFIG_DIR=/opt/activemq/conf.tmp",
                "ACTIVEMQ_DATA_DIR=/data/activemq"
            ],
            "Cmd": [
                "/app/run.sh"
            ],
            "ArgsEscaped": true,
            "Image": "webcenter/activemq",
            "Volumes": {
                "/data/activemq": {},
                "/opt/activemq/conf": {},
                "/var/log/activemq": {}
            },
            "WorkingDir": "/opt/activemq",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        }

6.docker 官方get started

几个概念
单词中文解释
container容器
swarm集群真实的或虚拟的机器组成的swarm集群
services服务通过docker-compose.yml 将service集合在一起称之为服务,每个service就是一个container
stack通过docker stack 可以将docker-compose.yml部署到swarm里

7. 使用docker-compose来配置

什么是docker-compose?

使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案, Docker 官方产品 Docker Compose 就是其中之一

Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。

通过 Docker-Compose 用户可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。

安装docker-compose的步骤

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试命令如下,能打印东西就代表成功了

docker-compose --version

建立docker-compose.yml
内容如下

version: '3'
services:
 db1:
   image: mysql
   ports:
    - "3306:3306"
   environment:
    - MYSQL_ROOT_PASSWORD=devuser
    - MYSQL_DATABASE=hellomall
   volumes:
    - "/data/docker/mysql:/var/lib/mysql"  // 前面的是宿主机的路径,后面的是容器里的路径,先建立mkdir -p /data/docker/mysql
 elasticsearch:
  image: elasticsearch:6.6.1
  environment:
    - cluster.name=elasticsearch
    - bootstrap.memory_lock=true
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  ulimits:
    memlock:
      soft: -1
      hard: -1
  ports:
    - 9200:9200
    - 9300:9300
  volumes:
    - "/data/docker/es/data:/usr/share/elasticsearch/data"
 kibana:
  image: kibana:6.6.1
  environment:
    SERVER_NAME:
    ELASTICSEARCH_HOSTS: http://localhost:9200
  ports:
    - 5601:5601
 zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
 kafka:
  image: wurstmeister/kafka
  ports:
    - "9092:9092"
  environment:
    KAFKA_ADVERTISED_HOST_NAME: localhost
    KAFKA_ADVERTISED_PORT: 9092
    KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
 redis:
    image: redis
    ports:
      - "6380:6379"

下一步就是要将docker-compose.yml部署成为一个服务集合(services),进行这步之前需要建立一个swarm

docker swarm init --advertise-addr 192.168.1.105

在这里插入图片描述
什么是swarm

A swarm is a group of machines that are running Docker and joined into a cluster.After that has happened, you continue to run the Docker commands you’re used to, but now they are executed on a cluster by a swarm manager. The machines in a swarm can be physical or virtual. After joining a swarm, they are referred to as nodes.(官方定义swarm是一组运行docker的机器组成的一个集群,组成集群后,可以在swarm manager的机器上来执行之前运行 docker的命令。机器里的机器称为 node )

如上图所示:现在已经建立了一个swarm集群.
接下来就可以将上面的docker-compose.yml部署成为一个services

新增一个services,名为getstartedlab

docker stack deploy -c docker-compose.yml getstartedlab

在这里插入图片描述

删除名为getstartedlab的services

docker stack rm getstartedlab

查看所有的service

docker service ls

查看services里的某个service,例如看getstartedlab这个services里的service getstartedlab_web

docker service ps getstartedlab_web

查看servicegetstartedlab,可以查看总的日志

docker stack ps getstartedlab

建立一个swarm(集群)
机器类型:

IP角色
192.168.1.111worker
192.168.1.105master
192.168.1.106worker

8. docker 碰到的问题

  • 问题1
docker: Error response from daemon: driver failed programming external connectivity on endpoint jenkins (322630d9843d744f8efa4ce07632025c0105a5933a42e3413ea6d4538b41aeba):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8686 -j DNAT --to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that nam

解决:
systemctl restart docker

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

配置镜像加速后出现的
解决:
systemctl daemon-reload
systemctl restart docker.service

9. 参考

官方guide

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值