Docker核心对象:(镜像(image),容器(container))
Docker操作集合
Docker 基本操作
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl enable docker
systemctl disable docker
systemctl status docker
docker info
Docker镜像操作
docker pull centos:7
docker images
docker image rm centos:7
docker save centos:7 | gzip>centos7.tar.gz
docker load < centos7.tar.gz
docker inspect centos:7
docker history centos:7
docker build -t jdk:8 .
Docker 数据卷操作
docker volume create 数据卷名称
docker volume ls
docker volume rm 数据卷名称
docker volume inspect
Docker容器操作
docker run -d --name xxx -p 8090:8090 -v ... --always .... -e .......
docker ps
docker ps -a
docker logs 容器id
docker inspect 容器id
docker stop 容器id
docker start 容器id
docker restart 容器id
docker rm -f 容器id
docker exec -it 容器id bash
docker container prune (移除所有exit状态的容器)
exit
Docker 网络操作
docker network create t-net(网络名称)
docker network inspect t-net
....
1.核心架构
2.Docker安装
1.安装虚拟机
基于vmware打开CentOS
准备CentOS,本次以CentOS7为例进行安装。
2. 克隆CentOS(选择链接克隆-更省空间),命名为CentOS7964-docker
重命名虚拟机名称及存放位置重定义
3.开启虚拟机系统
打开终端,使用ifconig查找虚拟机ip地址
4.通过MobaXterm工具链接虚拟机系统
5.安装Docker
5.1卸载Docker
sudo yum remove docker-ce \
docker-ce-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
5.2在线安装Docker
5.2.2安装一组工具
sudo yum install -y yum-utils
5.2.2设置 yum 仓库地址
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.2.3跟新yum缓存
sudo yum makecache fast #yum 是包管理器
5.2.4安装新版Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
5.3离线安装
5.3.1下载Docker离线安装包,地址:
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
5.3.2下载离线安装工具
https://github.com/Jrohy/docker-install/
说明,将下载好的这个工具解压.
5.3.3将下载好的资源放在一个目录,例如:
在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录)
5.3.4执行安装
# 进入/root/setup/docker 文件夹
cd /root/setup/docker# 为 install.sh添加执行权限
chmod +x install.sh# 安装
./install.sh -f docker-20.10.6.tgz
5.3.5检查安装状态
docker info
3.Docker基础使用命令
启动Docker服务
systemctl start docker
查看Docker状态
systemctl status docker
设置Docker开机自启
systemctl enable docker
禁用Docker开机自启
systemctl disable docker
重新启动Docker服务
systemctl restart docker
停止Docker服务
systemctl stop docker
查看Docker信息
docker info
Docker镜像加速
由于国内网络问题,需要配置加速器来加速。修改配置文件 /etc/docker/daemon.json
下面命令直接生成文件 daemon.json
cat <<EOF > /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"data-root": "/var/lib/docker"
}
EOF
4.Docker镜像操作
下载镜像:
docker pull hello-world
查看所有镜像文件
docker images
查看镜像详情
docker inspect hello-world
导出镜像(镜像导出(linux系统中的镜像文件下载到本地-例如window),导出后给他人使用)
docker save hello-world | gzip > hello-world.tar.gz
删除镜像文件
docker image rm hello-world
导入镜像文件操作(要在hello-world.tar.gz 文件所在目录下执行):
docker load < hello-world.tar.gz
基于镜像,启动运行
docker run hello-world
5.Docker容器操作命令
下载镜像(centOS7):
docker pull centos:7
创建并启动容器:
其中:
1)xxxx - 镜像名, 或 image id 的前几位,
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)
3) bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)。
案例:通过docker启动运行 centos7镜像
docker run -it centos:7 bash
查看Docker中的所有容器
所有运行的容器
docker ps
所有的容器
docker ps -a
查看容器日志信息
docker container logs 802
停止和重启容器
docker container stop 802
docker container restart 802
进入指定容器
docker exec -it 802 bash
退出容器
exit
删除容器
普通删除停止的容器
docker container rm 802
强制删除容器
docker container rm -f 802
清除所有终止容器
docker container prune
6.数据管理命令(数据卷/挂载主机目录)
数据卷的操作
创建数据卷
docker volume create container-vol
查看所有数据卷
docker volume ls
查看指定数据卷信息
docker volume inspect container-vol
[
{
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/container-vol/_data",
"Name": "container-vol",
"Options": {},
"Scope": "local"
}
]
启动挂载数据卷的容器
-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录
格式:docker run -it -v 数据卷名:容器目录 镜像名 bash
docker run -it -v container-vol:/root centos:7 bash
删除数据卷(如果数据卷被容器使用则无法删除)
docker volume rm container-vol
挂载主机目录操作
启动挂载主机目录
docker run -it -v /usr/app:/opt/app centos:7 bash
7.1Dockerfeil及镜像制作(制作基于centOS:7的系统+jdk8)
Dockerfile文件
分步骤1:
现在,以centos7为基础,构建oracle jdk8的镜像,首先通过vim打开Dockerfile,这个文件不存在会自动创建。然后进入编辑模式(按i字母),在编辑模式下可以拷贝如下语句(自己手动写也可以,但确保写的单词正确,大小写,空格)。
第一步:编写FROM语句(关键字一定要大写,例如FROM不能写小写)
FROM centos:7
分步骤2:
通过ADD命令将宿主机中的压缩包传入镜像容器中的指定目录,并同时解压缩
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
分步骤3:
设置环境变量(通过ENV关键字实现,目录启动容器中的目录)
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
分步骤4:
指定命令行操作(所有指令与后面内容要有空格)
CMD [‘bash’]
完整示例如下:(注意关键字与后面内容之间的空格,可以将如下完成示例拷贝Dockerfile文件,但是一定要注意你的jdk名字是什么)
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']
使用 Dockerfile 构建镜像(在Dockerfile所在目录执行docker指令)
docker build -t jdk:8 . #不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写.
注意末尾的点,表示构建过程中从当前目录寻找文件,jdk:8为我们创建的镜像名.
运行镜像文件
docker run -it jdk:8 bash
进入容器以后,可以通过echo $PATH查看环境变量,并可以通过java –version查看JDK版本信息。
如何通过此镜像运行一个web服务,例如sentinel
第一步:将sentinel拷贝宿主机指定目录,例如/root/servers目录(servers目录不存在可以自己创建)。
第二步:启动镜像容器,通过java执行运行web服务
基于jdk:8镜像启动运行sentinel服务(服务启动后可在宿主机通过localhost:8180进行访问)
docker run -d -p 8180:8080 --name sentinel \
-v /root/servers:/usr/sca \
jdk:8 java -jar /usr/sca/sentinel-dashboard-1.8.0.jar
第三步:打开浏览器,访问sentinel服务.
访问时你的ip地址应该为宿主机的ip地址,端口号为宿主机的端口号.例如
7.2制作Sentinel镜像(练习)
第一步:定义Dockerfile文件,同时将jdk,sentinel也要和这个文件放在同一个目录
FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/
ADD sentinel-dashboard-1.8.0.jar /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.0.jar"]
第二步:使用 Dockerfile 构建镜像(在Dockerfile所在目录执行docker指令)
docker build -t sentinel:8 . #不要丢掉这里的点
第三步:运行sentinel容器
docker run -d -p 8180:8080 sentinel:8
假如我们要做目录的挂载,保存容器中日志,可参考如下方式
docker run -d -p 8180:8080 --name sentinel \
-v /usr/local/docker/sentinel/logs:/root/logs/csp sentinel:8
8.安装sql数据库
第一步:拉取指定版本mysql
docker pull mysql:8.0.23
第二步:检查mysql镜像
docker images
第三步:启动运行mysql镜像 (docker run 用于启动一个容器)
sudo docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.23
假如安装过程中失败了,则可通过docker ps -a 查看以前的容器,假如已存在,则通过docker rm 镜像id 删除再重新安装即可。
登陆mysql服务
第一步:进入容器 (退出容器用exit)
sudo docker exec -it mysql bash
第二步:登陆(默认密码root),一定要先进入mysql容器。
mysql -uroot -proot
停止和启动mysql服务
停止mysql服务(可选)
docker stop mysql
启动mysql服务
docker start mysql
假如希望查看mysql启动时的日志,可以执行 docker container logs mysql 这个指令。
设置mysql开机自启动(可选)
docker update mysql --restart=always
安装Redis数据库
第一步:下载镜像文件
docker pull redis
第二步:准备配置文件(配置文件不是录入所以需要先创建在挂载)
创建redis配置文件目录
mkdir -p /usr/local/docker/redis01/conf
在配置文件录下创建redis.conf配置文件(这个文件一定要创建,否在我们进行目录挂载时默认生成的是一个目录)
touch /usr/local/docker/redis01/conf/redis.conf
第三步:创建redis实例并启动
sudo docker run -p 6379:6379 --name redis01 \
-v /usr/local/docker/redis01/data:/data \
-v /usr/local/docker/redis01/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
第四步:查看正在运行的进程
docker ps
访问redis服务器
第一步:控制台直接连接redis测试
docker exec -it redis01 bash
第二步:检测redis 版本
redis-server -v
或者
redis-cli -v
第三步:登录redis(默认不需要密码)
redis-cli
或者直接将上面的两个步骤合为一个步骤执行也可以,指令如下:
docker exec -it redis01 redis-cli
停止和启动redis服务
停止redis服务?
docker stop redis01
启动redis服务?
docker start redis01
重启 redis 服务?
docker restart redis01
安装Nginx
第一步:拉取ngnix镜像 (从这里hub.docker.com去查找)
docker pull nginx
第二步:查看images镜像
docker images
第三步:创建数据卷(这个对象会在宿主机直接创建一个目录)
docker volume create nginx-vol
说明:查看数据卷对应的宿主机目录,可以通过如下指令:
docker inspect nginx-vol
第四步:启动nginx服务
docker run --name nginx -p 80:80 -v nginx-vol:/etc/nginx -d nginx
其中:/etc/nginx 为nginx容器启动时,nginx镜像文件默认的解压目录
说明:假如以后想修改nginx配置,可以直接去nginx-vol数据卷对应的目录去修改.
访问nginx服务
进行访问检测,如图所示:
停止和nginx服务
停止nginx服务
docker stop nginx
启动nginx服务
docker start nginx
重启nginx服务
docker restart nginx
安装Nacos组件
第一步:拉取nacos(hub.docker.com)
docker pull nacos/nacos-server:1.4.1
第二步: mysql中执行nacos的sql脚本文件
1)将此文件nacos-mysql.sql(这个文件可从code服务器下载)拷贝到mysql容器的宿主机对应的挂载目录(可通过docker inspect mysql查看你mysql的挂载目录)
2)在linux环境下启动并登录mysql
进入mysql容器(前提是mysql已启动)
docker exec -it mysql bash
mysql -uroot -p
source /容器目录/nacos-mysql.sql
第三步:创建并启动nacos容器
docker run \
-e TZ="Asia/Shanghai" \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e MYSQL_SERVICE_HOST=192.168.227.131 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=jason \
-e MYSQL_SERVICE_PASSWORD=jason \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-p 8848:8848 \
--name nacos \
--restart=always \
-d nacos/nacos-server:1.4.1
参数说明
单节点模式
MODE=standalone
数据库地址
MYSQL_SERVICE_HOST
数据库用户名
MYSQL_SERVICE_USER
数据库密码
MYSQL_SERVICE_PASSWORD
需连接的数据库名称
MYSQL_SERVICE_DB_NAME
端口映射
-p 8848:8848
任意时候重启容器,开机就能自动启动容器(需设置docker为开机自启)
--restart=always
假如启动失败,检查启动日志,例如:
docker container logs nacos
访问nacos服务
启动nacos,然后在windows中输入http://ip:port/nacos方式进行访问测试
停止和启动nacos服务
同nginx服务命令
Docker 容器互联实践
初始化网络
docker network create -d bridge t-net #t-net为自己起的网络名称
其中,-d driver,网络类型,默认 bridge。
说明,创建好这个网络以后,在网落上添加容器,容器就可以通讯了
查看网络信息
docker network ls
查看网络信息
docker inspect 67d #67d 为创建的网络id
实现容器互联
创建容器
打开终端,基于centos:7这个镜像启动容器,并加入到t-net这个网络
docker run -it --name app1 --network t-net centos:7
新开终端执行,基于centos:7这个镜像再启动容器,同时也加入到t-net网络
docker run -it --name app2 --network t-net centos:7
测试网络互通
ping app1
ping app2