docker教程通俗易懂

docker简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker安装与启动

1.yum包更新到最新
sudo yum update

2.安装所需的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3.设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux
/centos/docker-ce.repo

4.安装docker
sudo yum install docker-ce

4.1 安装containerd.io-1.2.6-3.3.el7.x86_64.rpm
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

5.安装后查看docker版本
docker -v

6.启动docker并加入开机自动启动
systemctl start docker
systemctl enable docker

7.重新加载配置文件
systemctl reload  docker

8.重启docker
systemctl restart docker

centos8安装docker报错

  • Error:
    Problem: package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed

在这里插入图片描述
在这里插入图片描述

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

在这里插入图片描述
在这里插入图片描述

设置ustc的镜像

ustc是老牌的linux镜像服务提供者,ustc的docker镜像加速器速度很快。ustc docker mirror 的优势就是不需要注册,是真正的公共服务。

1.编辑该文件

vi /etc/docker/daemon.json

2.在该文件中输入如下内容:
{
    "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
    
}

启动停止docker

1.启动docker
systemctl start docker

2.查看docker启动状态
systemctl status docker

3.停止docker
systemctl stop docker

4.重启docker
systemctl restart docker

5.开机自启
systemctl enable docker

6.查看概要信息
docker info 

7.查看docker帮助文档
docker --help

在这里插入图片描述

docker镜像常用命令

  • 查看镜像

在这里插入图片描述

1.查看镜像
docker images

在这里插入图片描述

  • 搜索镜像
    在这里插入图片描述
1.搜索镜像(搜索的是互联网上的镜像)
docker search 镜像名称

在这里插入图片描述

  • 拉取镜像
1.拉取镜像
docker pull centos:7

在这里插入图片描述

  • 删除镜像
1.按镜像ID删除镜像
docker rmi 镜像ID

2.删除所有镜像
docker rmi 'docker images -q'  (左上角的单引号)

在这里插入图片描述
在这里插入图片描述

docker容器相关的命令

  • 查看容器
1. 查看正在运行的容器
docker ps

2.查看所有的容器
docker ps -a

3.查看最后一次运行的容器
docker ps -l

4.查看停止的容器
docker ps -f status-exited
  • 创建与启动容器

在这里插入图片描述

1.交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash

2.退出当前容器
exit

3.守护方式创建容器
docker run -di --name=容器名称 镜像名称:标签

4.登录守护式容器方式
docker exec -it 容器名称(或者容器id) /bin/bash

在这里插入图片描述
在这里插入图片描述

1.进入守护方式进行的容器
docker exec -it  mycentos2(容器名称) /bin/bash

在这里插入图片描述

  • 停止与启动容器
1.停止容器
docker stop 容器名称(或者容器ID)

2.启动容器
docker start 容器名称(或者容器ID)

在这里插入图片描述

  • 文件拷贝
docker cp 文件路径 容器名称:容器目录

docker cp 容器名称:容器目录 需要拷贝的文件或者目录
  • 目录挂载
    在这里插入图片描述
1.就是目录共享
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name-mycentos3 centos:7

在这里插入图片描述

  • 获取容器的ip

在这里插入图片描述

docker inspect --format='{{.NetworkSettings.IpAddress}}' mycentos3

在这里插入图片描述

  • 移除容器
1.移除容器之前必须先停掉容器
docker rm mycentos3

在这里插入图片描述

ubuntu18.04部署

  • 下载容器
1.docker pull ubuntu:18.04
  • 运行容器
1.docker run -di --name=myubuntu ubuntu:18.04 /bin/bash

在这里插入图片描述

  • 查看容器ip
1.docker inspect myubuntu

在这里插入图片描述

  • 查看正在运行的容器
1.docker ps

在这里插入图片描述

  • 进入守护式创建的容器
1.进入守护方式进行的容器
docker exec -it  myubuntu(容器名称) /bin/bash

在这里插入图片描述

  • 进入容器安装curl报错
    在这里插入图片描述
解决问题
1.apt-get update 
2.apt-get-upgrade
3.apt-get install curl 安装成功
  • 无法Ping

在这里插入图片描述

  • systemctl command not found

在这里插入图片描述
在这里插入图片描述

jdk部署

  • 查找jdk镜像
docker search jdk

在这里插入图片描述

  • 下载openjdk镜像
docker pull openjdk
  • 运行jdk容器
docker run -d -it --name myopenjdk openjdk /bin/bash

格式: docker  run  -d  -it   [镜像名称或id]    /bin/bash

注意: -it   /bin/bash  一定不能省了,不然jdk起不来,或者懒人写法 -it  bash  也可以。
  • 进入容器验证:
docker exec -it myopenjdk /bin/bash

mysql部署

在这里插入图片描述

1.拉取mysql镜像
docker pull centos/mysql-57-centos7

2.创建容器
docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p代表端口映射,格式为 宿主机映射端口:容器运行端口
-e代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登录密码

3.进入mysql容器
docker exec -it tensquare_mysql /bin/bash

4.登录Mysql
mysql -u root -p


在这里插入图片描述

postgreSQL部署

1.拉取postgreSQL镜像(自带postgis)
docker pull  kartoza/postgis:9.6-2.4

2.创建容器
docker run -di --name=postgresql -p 5432:5432  --restart always -e POSTGRES_USER='postgres' -e MYSQL_ROOT_PASSWORD=123456  ALLOW_IP_RANGE=0.0.0.0/0  kartoza/postgis:9.6-2.4


ALLOW_IP_RANGE=0.0.0.0/0  允许所有主机访问
-p代表端口映射,格式为 宿主机映射端口:容器运行端口
-e代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登录密码

3.进入postgreSQL容器
docker exec -it postgresql /bin/bash

4.登录postgreSQL
//将当前root切换成postgres
su postgres

输入用户名,密码再命令执行完后,再根据提示输入
psql -U postgres -W

输入密码,登录成功

在这里插入图片描述

1、从容器里面拷文件到宿主机?
docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径 
示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js,  现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢?

docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt


2、从宿主机拷文件到容器里面
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢?    

docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js

percona 部署

在这里插入图片描述

1.docker pull percona:5.7.23
2.docker run -di --name=percona -v /home/data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
3.docker exec -it percona /bin/bash

在这里插入图片描述

tomcat部署

在这里插入图片描述

1.拉取镜像
docker pull tomcat:7-jre7

2.创建容器
创建容器 -p表示地址映射
-v表示目录映射
docker run -di --name=mytomcat -p 9000:8080
-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

zookeeper部署

  • 部署流程
1. systemctl status firewalld   查看防火墙状态
2. systemctl disable firewalld  关闭防火墙
3. docker pull zookeeper:3.5    下载zookeeper镜像
4. docker images 				查看镜像   
5. docker run -di --name=zk -p 2181:2181 zookeeper:3.5   以守护方式(后台运行)运行容器
6. docker exec -it zk /bin/bash 进入容器    

在这里插入图片描述

nginx部署、

1.拉取镜像
docker pull nginx

2.创建nginx容器
docker run -di --name=mynginx -p 80:80 nginx

redis部署

1.拉取镜像
docker pull redis

2.创建容器
docker run -di --name=myredis -p 6379:6379 redis

在这里插入图片描述

elasticsearch7.6部署

①. 下载镜像

docker pull elasticsearch:7.6.0

②. 安装elasticsearch

//创建一个elk文件夹, 后面的elk日志采集系统的配置文件都放在这里面
mkdir /home/elk

//创建elasticsearch配置文件
vi /home/elk/elasticsearch.yml

//在里面添加如下配置:

cluster.name: "docker-cluster"
network.host: 0.0.0.0
# 访问ID限定,0.0.0.0为不限制,生产环境请设置为固定IP
transport.host: 0.0.0.0
# elasticsearch节点名称
node.name: node-1
# elasticsearch节点信息
cluster.initial_master_nodes: ["node-1"]
# 下面的配置是关闭跨域验证(可以不开启)
http.cors.enabled: true
http.cors.allow-origin: "*"

③. 创建并启动elasticsearch容器

docker run -di -p 9200:9200 -p 9300:9300 --name=elasticsearch -v /home/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.6.0

④. 之后通过9200端口在浏览器上访问(需要开启外网访问权限),有信息返回则成功;,像下面的信息:

{
  "name" : "node-1",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "7jUr1QFPQcSbDGG4A4c5Og",
  "version" : {
    "number" : "7.6.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
    "build_date" : "2020-02-06T00:09:00.449973Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

注意:如果需要添加插件时,需要将容器的插件目录映射到实际的路径中或者通过命令
(如安装ik分词器:docker cp ik elasticsearch:/usr/share/elasticsearch/plugins/)将其拷贝到容器中

可能遇到的问题

  1. 启动成功后,过了一会就停止
    这与我们刚才修改的配置有关,因为elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存
    区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存(实际就是硬件配置达不到它的要求),所以我们还需要系统调优。

修改/etc/security/limits.conf ,添加如下内容:

  • soft nofile 65536
  • hard nofile 65536
    nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制

修改/etc/sysctl.conf,追加内容

vm.max_map_count=655360
vm.max_map_count是限制一个进程可以拥有的VMA(虚拟内存区域)的数量

执行下面命令 修改内核参数马上生效,之后重启服务器和docker服务

sysctl ‐p
2. 启动失败显示如下日志信息
ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
这个是由于elasticsearch7是集群多节点的版本,需要在elasticsearch.yml中添加如下配置(我们已经在上面配置了无需再处理):

elasticsearch节点名称
node.name: node-1

elasticsearch节点信息
cluster.initial_master_nodes: [“node-1”]

  1. 外网上已经可以通过9200端口推送数据和查询数据,但是后面安装的kibana等组件却无法连
    查看日志发现如下错误

error=>"Elasticsearch Unreachable: [http://192.168.6.128:9200/][Manticore::…
这个问题通常是由于安装在一台机器上的docker容器,防火墙开启的状态下,docker容器内部无法访问宿主机服务(能够访问非宿主机的其他局域网计算机的服务),解决方法如下3种:

配置防火墙规则firewall-cmd --zone=public --add-port={port}/tcp --permanent,并重载防火墙规则firewall-cmd --reload

firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
启动容器时使用–net host模式(docker的4种网络模式:https://www.jianshu.com/p/22a7032bb7bd)

关闭防火墙(不建议)

迁移与备份

1.将容器保存为镜像
docker commit mynginx mynginx_i

2.镜像备份
docker save -o mynginx.tar mynginx_i

3.镜像恢复与迁移
首先我们先删除掉mynginx_img镜像,然后执行此命令进行恢复
docker load -i mynginx.tar
-i输入的文件  执行后再次查看镜像,可以看到镜像已经恢复

dockerfile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker私有仓库的创建

在这里插入图片描述

1.拉取私有仓库镜像
docker pull registery

2.启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry

3.打开浏览器 输入地址 http://192.168.184.141:5000/v2/_catalog看到{"registories":[]}表示私有仓库搭建成功并且内容为空

4.修改daemon.json
vi /etc/docker/daemon.json

添加如下内容.保存退出
{"insecure-registries":["192.168.184.141:5000"]}
此步用于让docker信任私有仓库地址

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值