一、简介

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

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

运行中的镜像称为容器、容器启动是非常快速的

docker

win

二、核心概念

## 1.引入库

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

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

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

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

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

1、使用Docker的步骤

步骤

1、安装Docker

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

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

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

2、安装Docker

一、安装linux虚拟机

1.VMWare、VirtualBox(安装)

2.VirtualBox管理导入虚拟机文件centos7-atguigu.ova

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

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

5、设置虚拟机网络
桥接网络=选好网卡==接入网线
6.设置好网络以后使用命令重启虚拟机的网络

service network restart

7.查看linux的ip地址

ip addr

8.使用客户端连接linux

二、在linux虚拟机上安装docker

步骤:

1、检查内核版本,必须是3.10及以上
uname ‐r
2、安装docker
yum install docker
3、输入y确认安装
4、启动docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker ‐v
Docker version 1.12.6, build 3e8e77d/1.12.6
5、开机启动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.
6、停止docker
systemctl stop 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

2、配置镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://9hhrg883.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3、开启2375端口

vim /usr/lib/systemd/system/docker.service
# 修改ExecStart添加下面内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
# 重新加载docker配置
systemctl daemon-reload
systemctl restart docker
# 设置开机自启
systemctl enable docker.service

3、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/

2、容器操作

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

步骤:
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

更多命令参看
可以参考每一个镜像的文档镜像命令文档查看

4、环境搭建

安装mysql
1.查看镜像 docker images

2.搜索镜像 docker search mysql

3.拉取镜像 docker pull mysql

4.错误的启动

[root@localhost ~]#  docker run --name mysql01 -d mysql
61985d226cd0f2a761202b9c5237b5809adae0efd57a16b5f1549d20f6014932

mysql异常退出
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS                          PORTS                                       NAMES
61985d226cd0   mysql           "docker-entrypoint.s…"   About a minute ago   Exited (1) About a minute ago                                               mysql01
934c560346f4   tomcat          "catalina.sh run"        4 hours ago          Up 4 hours                      0.0.0.0:8888->8080/tcp, :::8888->8080/tcp   gifted_volhard
fa1736cb49bc   tomcat:latest   "catalina.sh run"        4 hours ago          Exited (143) 4 hours ago                                                    mytomcat

查看退出的日志
docker logs 容器id

2021-05-20 06:28:44+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified
    You need to specify one of the following:
    - MYSQL_ROOT_PASSWORD
    - MYSQL_ALLOW_EMPTY_PASSWORD
    - MYSQL_RANDOM_ROOT_PASSWORD
    - 这三个参数必须制定一个,没有指定密码

正确的启动
[root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

也不能拿来使用,没有做端口映射,外部访问不到
端口映射启动

[root@localhost ~]# docker run -p3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456  -d mysql
82cae1d5894702033c7ae5a6a9b85c4a7a57bf7434ce557b92d16876ab956bfe
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
82cae1d58947   mysql     "docker-entrypoint.s…"   26 seconds ago   Up 25 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql02
934c560346f4   tomcat    "catalina.sh run"        4 hours ago      Up 4 hours      0.0.0.0:8888->8080/tcp, :::8888->8080/tcp              gifted_volhard
[root@localhost ~]# docker start mysql

**错误:docker部署mysql宿主机连接不上(转载)**

navicat
解决方法:
1、在虚拟机中登录到mysql容器,然后进入mysql

docker exec -it mysql /bin/bash
mysql -uroot -p
Enter password: 
mysql> select host,user,plugin,authentication_string from mysql.user;

mysql1
备注:host为 % 表示不限制ip localhost表示本机使用 plugin非mysql_native_password 则需要修改密码

2、修改密码

mysql> use mysql;
mysql> alter user 'root'@'%' identified with mysql_native_password by '123';
mysql> update user set host = '%' where host = 'localhost' and user = 'root';
mysql> flush privileges;
mysql> select host,user,plugin,authentication_string from mysql.user;

出现以下图片mysql_native_password 就成功了
mysl2docker官网几个其他的高级操作

docker run ‐‐name mysql03 ‐v /conf/mysql:/etc/mysql/conf.d ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw‐d mysql:tag
-v把主机的/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的一些配置参

mysql安装

sudo docker run -p 3306:3306 --name mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:8.0

三、docker下安装redis

1、下载镜像

docker pull redis

2、进入容器

docker exec -it   40dbda990664(容器名称或者id)   /bin/sh

#docker 下进入redis删除key
docker exec -it hb-redis /bin/bash
redis-cli
ping
AUTH HBJ111QQQ
select 2
keys *
exit

3、以客户端形式进入

docker exec -it redis redis-cli

4、容器添加开机自启动

docker update redis --restart=always


docker run -d -p 56379:6379 --name hb-redis  redis --requirepass "password"


docker run -p 6379:6379 --name lm-redis  \
-v /usr/local/redis/data:/data \
-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf \
-d --restart=always  redis:5.0.4 redis-server /etc/redis/redis.conf \
--requirepass "123456"

-p 映射端口
--name 启动的名称
-v 映射文件夹
-d 后台启动redis redis-server 并使用redis.conf配置启动redis

5、docker下运行minio服务

docker run -p 50110:9000 --name hb-minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=xxminio" \
-e "MINIO_SECRET_KEY=xxminio" \
-v /opt/data:/data \
-v /opt/config:/root/.minio \
minio/minio server /data

6、docker 下运行consul


docker run -itd --name hb-consul -p 6007:8500/tcp consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0


docker run -itd --name hb-consul -p 8500:8500/tcp -v /data/hb-consul/conf/:/hb-consul/conf/ -v /data/hb-consul/data/:/hb-consul/data/ consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0 -config-dir=/consul/conf

redis 删除key
进入容器
docker exec -i -t shopxx-b2b2c-redis /bin/bash

进入redis-cli
redis-cli

身份验证
auth 密码


根据桶select 4查看Key
keys *

清除所有key
flushall

删除指定key

del key


docker run -p 56379:6379 --name redis  \
-v /usr/local/redis/data:/data \
-v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf \
-d --restart=always  redis:5.0.4 redis-server /etc/redis/redis.conf \
--requirepass "ybzl123456."


docker run -p 50110:9000 --name hb-minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=xxminio" \
-e "MINIO_SECRET_KEY=xxminio" \
-v /opt/data:/data \
-v /opt/config:/root/.minio \
minio/minio server /data



docker run -d -p 8086:8086 --name influxdb influxdb


docker run -d -p 8114:7114 --name saas-logi-xasy-test-1.2.1 --restart=always -v /home/yml-conf:/home yb/saas-logi:xasy-1.2.1   --spring.config.location=/application.yml --spring.config.location=/home/bootstrap-xasytest.yml


docker run -itd --name hb-consul -p 6007:8500/tcp consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0




docker run -itd --name hb-consul -p 5007:8500/tcp -v /data/hb-consul/conf/:/consul/conf/ -v /data/hb-consul/data/:/consul/data/ consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0 -config-dir=/consul/conf


docker run -d --name emqx-etyy --restart=always -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx


1883MQTT 协议端口
8883MQTT/SSL 端口
8083MQTT/WebSocket 端口
8080HTTP API 端口
8084 WSS端口
18083Dashboard 管理控制台端口

四 docker常用命令

1、查看日志

docker exec -it 容器id /bin/sh
ls 查看目录
cd root/logs
查看日志tail -fn 100 info.log

2、常用命令

常用命令
设置docker开机自启:
sudo chkconfig docker on
查所有镜像:
docker images
删除某个镜像:
docker rmi CONTAINER ID(容器ID)
删除所有镜像:
docker rmi $(docker images -q)
打开/关闭/重启docker服务:
sudo service docker start/stop/restart
查看正在运行的容器:
docker ps
查看所有安装的容器:
docker ps -a
启动某个容器:
sudo docker start CONTAINER ID(容器ID)
停止某个容器:
sudo docker stop CONTAINER ID(容器ID)
停止所有容器:
docker stop $(docker ps -a -q)
删除某个容器:
sudo docker rm CONTAINER ID(容器ID)
删除所有容器:
docker rm $(docker ps -a -q)
docker强制批量删除none的image镜像
docker images|grep none|awk ‘{print $3 }’|xargs docker rmi
进入某个容器:
docker exec -it 容器ID /bin/bash
docker镜像提速:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://fe8a7d6e.m.daocloud.io

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐