docker
·
概念
1.Docker是一个开源的应用容器引擎,
2.容器可以看做在Linux系统下的一个隔离的进程,包含了应用以及应用的运行环境
3.可以将容器打包成镜像放到远程仓库,后续其他Linux服务器可以从远程仓库下载镜像,实现一次构建,随处运行,减轻服务器部署压力。
安装
yum -y install gcc
yum -y install gcc-c++
yum install -y yum-utils
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl start docker
cd /etc/docker/
vim daemon.json
{
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://docker.xuanyuan.me",
"https://doublezonline.cloud",
"https://dislabaiot.xyz",
"https://docker.fxxk.dedyn.io"
]
}
systemctl daemon-reload
systemctl restart docker
docker run hello-world
systemctl enable docker
命令
镜像命令
docker images
docker pull redis
docker pull redis:6.0.8
docker rmi -f imageId
# 镜像迁移
docker save -o /redis-7.0.15.tar redis:7.0.15
docker load -i /redis-7.0.15.tar
# 虚悬镜像(仓库名、标签名都是 <none>的镜像),在构建或者删除镜像时可能由于一些错误导致出现虚悬镜像
docker image ls -f dangling=true # 查看所有虚悬镜像
docker image prune # 删除所有虚悬镜像
容器命令
docker run -it --name=tomcat -p 8080:8080 tomcat /bin/bash # 前台交互
docker run -d --privileged=true -v 宿主机绝对路径:容器绝对路径 --name=u1 ubuntu /bin/bash # 挂在数据卷(数据持久化到宿主机磁盘)
docker run -d --privileged=true --volumes-from u1 ubuntu /bin/bash # 创建新容器,数据卷挂载规则继承u1的
# exit退出时,容器也会停止
# CTRL P Q 停止时容器会继续运行
docker run -d --name=tomcat -p 8080:8080 tomcat # 后台启动
docker ps
docker ps -a
docker start 容器id
docker stop 容器id
docker rm -f 容器id
docker ps -a -q | xargs docker rm -f # 删除所有容器
docker exec -it Tomcat /bin/bash # 进入容器内部,通过exit退出时,容器不会停止
docker cp 容器ID:容器内路径 目的主机路径
docker cp 主机路径 容器ID:容器内路径
docker export tomcat > tomcat.tar
cat tomcat.tar | docker import - atguigu/tomcat:3.2.1 # 创建镜像
docker commit -m="第一次提交" -a="jiangrenbao" u2 atguigui/myubuntu2:4.5.6 # 根据容器创建新镜像
Registry搭建docker私库
docker pull registry
docker run -d -p 5000:5000 -v /dockerRegistry/:/tmp/registry --privileged=true registry # 启动私库
curl -XGET http://localhost:5000/v2/_catalog # 查看私库有哪些镜像
docker tag ubuntu localhost:5000/myubuntu:5.0 # 修改待推送镜像的tag
vim /etc/docker/daemon.json # docker默认不允许http方式推送镜像,通过新增该配置取消限制
"insecure-registries": ["localhost:5000"]
systemctl restart docker
docker run -d -p 5000:5000 -v /dockerRegistry/:/tmp/registry --privileged=true registry
docker push localhost:5000/myubuntu:5.0 # 推送到私库
curl -XGET http://localhost:5000/v2/_catalog # 查看私库有哪些镜像
docker pull localhost:5000/myubuntu:5.0 # 从私库下载
安装软件
mysql
docker run -d -p 3307:3306 --privileged=true -v /docker/mysql3307/log:/var/log/mysql -v /docker/mysql3307/data:/var/lib/mysql -v /docker/mysql3307/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=jrbjrb811 --name=mysql3307 mysql:8.0.39
# 只要挂载在宿主机的日志文件、数据文件、配置文件都在,容器删除再新建的话,数据依然在。
redis
vim /docker/redis/redis.conf
# 开启密码验证(可选)
requirepass 123
# 允许redis外地连接,需要注释掉绑定的IP
# bind 127.0.0.1
# 关闭保护模式(可选)
protected-mode no
# 注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no
# 开启redis数据持久化, (可选)
appendonly yes
docker run -d -p 6380:6379 --name redis6380 --privileged=true -v /docker/redis6380/redis.conf:/etc/redis/redis.conf -v /docker/redis6380/data:/data redis:7.0.15 redis-server /etc/redis/redis.conf
# 只要挂载在宿主机的数据文件、配置文件都在,容器删除再新建的话,数据依然在。
Dockerfile
构建Docker镜像的文本文件。
vim Dockerfile
# 基础镜像
FROM ubuntu
# 作者邮箱
MAINTAINER JRB<abc@qq.com>
# run build时运行的命令
RUN echo "abc" > abc.txt
# 设置环境变量,通过$获取
ENV MYPATH /usr/local
# 登录时的工作目录
WORKDIR $MYPATH
# 将宿主机文件添加到容器的指定路径中,安装包要和Dockerfile文件在同一目录,如果是压缩文件会自动解压
ADD file.tar.gz /usr/local
# 拷贝宿主机文件或目录到容器中,文件和目录要和Dockerfile文件在同一目录
COPY d /usr/local
# 对外暴露的端口
EXPOSE 80 8080
# 有多个CMD命令时只有最后一个生效,docker run时运行
CMD echo "docker run时执行"
docker build -t defindubuntu:1.1 .
network
启动docker服务时,会创建一个docker0网桥,主机与容器通过该网桥互相通信,实现端口映射功能。
docker network有三种网络模式:bridge、host、none,默认为bridge模式,该模式下会为每一个容器分配ip,并连接到docker0
容器编排
如果要同时启动多个容器,并且容器之间存在启动顺序,可以使用集群容器编排实现。
compose适合单机部署多个容器,集群部署需要用K8S。
vim docker-compose.yml
version: "3"
services:
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 'jrbjrb811'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
ports:
- "3333:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- my_network
command: --default-authentication-plugin=mysql_native_password
depends_on:
- redis
redis:
image: redis
ports:
- "6666:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- my_network
command: redis-server /etc/redis/redis.conf
networks:
my_network:
docker compose config -q # 在docker-compose.yml文件所在目录执行,对文件进行语法检查
docker compose up -d # 启动并执行docker-compose.yml文件
Docker监控图形化界面
Portainer
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /docker/portainer/var/run/docker.sock:/var/run/docker.sock -v /docker/portainer/portainer_data:/data portainer/portainer-ce:2.13.0-alpine
通过ip:9000访问。
CIG
https://www.yuque.com/tmfl/cloud/ay9g1r
vim docker-compose.yml
version: '3.1'
volumes:
grafana_data: {}
services:
influxdb:
# tutum/influxdb 相比influxdb多了web可视化视图。但是该镜像已被标记为已过时
image: tutum/influxdb:0.9
restart: always
environment:
- PRE_CREATE_DB=cadvisor
ports:
- "8083:8083" # 数据库web可视化页面端口
- "8086:8086" # 数据库端口
volumes:
- ./data/influxdb:/data
cadvisor:
image: google/cadvisor:v0.32.0
links:
- influxdb:influxsrv
command:
- -storage_driver=influxdb
- -storage_driver_db=cadvisor
- -storage_driver_host=influxsrv:8086
restart: always
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
grafana:
image: grafana/grafana:8.5.2
user: '104'
restart: always
links:
- influxdb:influxsrv
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- HTTP_USER=admin
- HTTP_PASS=admin
- INFLUXDB_HOST=influxsrv
- INFLUXDB_PORT=8086
更多推荐


所有评论(0)