docker学习笔记

1、简介

Docker是一个开源的应用容器引擎;是一个轻量级容器技术;

Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;

运行中的这个镜像称为容器,容器启动是非常快速的。
docker
windows镜像系统

2、核心概念

docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);

docker客户端(Client):连接docker主机进行操作;

docker仓库(Registry):用来保存各种打包好的软件镜像;

docker镜像(Images):软件打包好的镜像;放在docker仓库中;

docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
核心概念

使用Docker的步骤:

1)、安装Docker

2)、去Docker仓库找到这个软件对应的镜像;

3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;

4)、对容器的启动停止就是对软件的启动停止;

3、安装Docker

1)、安装linux虚拟机(或者使用阿里云服务器)

1)、VMWare、VirtualBox(安装);

2)、导入虚拟机文件;

3)、双击启动linux虚拟机;使用  root/ 123456登陆

4)、使用客户端连接linux服务器进行命令操作;

5)、设置虚拟机网络;

    桥接网络===选好网卡====接入网线;

6)、设置好网络以后使用命令重启虚拟机的网络
1
service network restart
7)、查看linux的ip地址
1
ip addr
8)、使用客户端连接linux;

2)、在linux虚拟机上安装docker

一、配置阿里云yum源(提高docker软件下载速度): 参考连接
1、备份

1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 7

1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

或者

1
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3、生成新的缓存

1
2
3
yum clean all
yum makecache
yum update

二、安装docker步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1、检查内核版本,必须是3.10及以上
uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
yum update

3、卸载旧版本(如果安装过旧版本的话)
$ yum remove docker docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r

7、安装docker
$ yum install docker-ce-17.12.0.ce #由于repo中默认只开启stable仓库,这里安装的是稳定版17.12.0

8、启动docker
[root@localhost ~] systemctl start docker
[root@localhost ~] docker -v
Docker version 1.12.6, build 3e8e77d/1.12.6

9、开机启动docker
[root@localhost ~] systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

10、停止docker
systemctl stop docker

4、Docker常用命令&操作

1)、镜像操作

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

镜像查找: https://hub.docker.com/(包含具体镜像的操作命令)
docker改国内官方镜像(提升镜像pull速度):
编辑文件/etc/docker/daemon.json,没有就新建。加入以下项目

1
2
3
{
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
}

本身daemon.json文件已经有项目,就额外增加registry-mirrors项

重启docker daemon

1
systemctl restart docker

2)、容器操作

软件镜像(QQ安装程序)—-运行镜像—-产生一个容器(正在运行的软件,运行的QQ);

步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1、搜索镜像
[root@localhost ~] docker search tomcat
2、拉取镜像
[root@localhost ~] docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
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

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

3)、安装MySQL示例

1
docker pull mysql:5.7

正确的启动:做了端口映射

1
2
3
4
5
[root@localhost ~]# docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad10e4bc5c6a mysql "docker-entrypoint.sh" 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql02

几个其他的高级操作

1
2
3
4
5
6
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)

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
指定mysql的一些配置参数

docker安装mysql后外部无法访问,解决办法:

  1. 记得开启阿里云相应的端口号
  2. 修改权限
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    使用bash窗口
    docker exec -it mysqlDB bash

    登陆mysql
    mysql -uroot -p123456;

    修改权限
    > use mysql;
    > update user set authentication_string = password('123456') where user = 'root';
    > grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
    > flush privileges;
    > exit;

4)、安装redis

1
docker pull redis:5.0.7

正确的启动:做了端口映射

1
2
3
4
5
6
7
8
[root@localhost ~] docker run -d -p 6381:6379 --name myredis  redis:5.0.7 --requirepass "123456"
# --requirepass "123456" 设置密码
# -p 6381:6379:映射容器服务的 6379 端口到宿主机的 681 端口。外部可以直接通过宿主机ip:6381 访问到 Redis 的服务
[root@localhost ~] docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dff3d4e7ef6b redis:5.0.7 "docker-entrypoint.s…" 16 minutes ago Up 16 minutes 0.0.0.0:6381->6379/tcp myredis
[root@localhost ~] docker exec -it myredis bash
#docker exec -it xxx bash 这个命令是表示进入容器的,xxx是服务名称也可以是容器的id

几个其他的高级操作

1
2
3
4
5
6
7
# docker run -p 6382:6379 --name myredis -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d redis:5.0.7 redis-server /etc/redis/redis.conf --appendonly yes
  命令说明:
  --name myredis : 指定容器名称,这个最好加上,不然在看docker进程的时候会很尴尬。
  -p 6699:6379 : 端口映射,默认redis启动的是6379,至于外部端口,随便玩吧,不冲突就行。
  -v $PWD/redis.conf:/etc/redis/redis.conf : 将主机中当前目录下的redis.conf配置文件映射。
  -v $PWD/data:/data -d redis:3.2 : 将主机中当前目录下的data挂载到容器的/data
  --redis-server --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置\

docker安装redis后外部无法访问,解决办法: 记得开启阿里云相应的端口号.

5)、安装Elasticsearch

参考文章:https://blog.csdn.net/qq_32101993/article/details/100021002
拉取镜像:

1
docker pull elasticsearch:tag(6.8.5)

启动:

1
2
3
4
5
[root@localhost ~] docker run -d  -e  ES_JAVA_OPTS="-Xms256m -Xmx256m"   -p 9200:9200   -p 9300:9300  --name ES01  elasticsearch:版本号(如果是latest则不写) 
[root@localhost ~] docker ps
# 查看是否成功
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c3f23945d1ed elasticsearch:6.8.5 "/usr/local/bin/dock…" 6 minutes ago Up 53 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp ES01

此时已经可以正常外部访问网址:域名:端口号

配置跨域:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.首先进入容器
docker exec -it ES01 /bin/bash
2.安装vim
yum -y install vim*
3.编辑/config/elasticsearch.ym
vim elasticsearch.yml
4.添加内容
cluster.name: "qfcwx-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
5.exit
6.重启
docker restart ES01(容器id或者name)
  1. cluster.name:自定义集群名称。
  2. network.host:当前es节点绑定的ip地址,默认127.0.0.1,如果需要开放对外访问这个属性必须设置。
  3. http.cors.enabled:是否支持跨域,默认为false。
  4. http.cors.allow-origin:当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。

elasticsearch.yml
访问截图:

访问截图

5)、安装rabbitMQ

参考文章:https://www.cnblogs.com/yufeng218/p/9452621.html
拉取镜像:选择带有mangement的版本(包含web管理页面

1
docker pull rabbitmq:management

启动:

1
2
3
4
[root@localhost ~] docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin 6bd1749b8197
[root@izlnxqoeytyh4fz ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6575d289410 6bd1749b8197 "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, 0.0.0.0:15673->5672/tcp rabbitmq
  • -v 映射目录或文件;
  • –hostname 主机名(RabbitMQ的一个重要注意事项是它根据所谓的 “节点名称” 存储数据,默认为主机名);
  • -e 指定环境变量;(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)
1
2
# 进入控制台
docker exec -it rabbitmq /bin/bash

此时已经可以正常外部访问网址:域名:端口号

访问截图:
访问截图

坚持原创技术分享,您的支持是我前进的动力!