docker 基本组成: docker主机:安装docker程序的程序 docker是直接安装在操作系统上的 docker仓库:用来保存各种打包好的软件镜像 仓库分为公有仓库和私有仓库(类似maven) docker镜像:软件打包好的镜像。镜像存放在仓库中 docker容器:镜像启动后的一个实例称之为容器 容器是独立运行的一个或者多个应用 docker command: centos: uname -r uname -a lscpu 内存: free free -h 磁盘: fdisk -l 关闭防火墙: systemctl stop firewalld systemctl disable firewalld 上传下载: yum -y install lrzsz 1.上传 鼠标拖拽 2.下载 a 下载一个文件 sz filename b 下载多个文件 sz filename1 filename2 c 下载dir目录下的所有文件 不包含dir文件夹 sz dir/* docker 前置条件: yum install -y yum-utils device-mapper-persistent-data lvm2 添加源(国内镜像) yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo yum makecache fast 查看docker版本: yum list docker-ce --showduplicates | sort -r 安装docker: 安装最新版:推荐大家安装最新版本 yum -y install docker-ce 安装指定版本: 语法规则:yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io yum -y install docker-ce-18.06.3.ce-3.el7 docker-ce-cli.x86_64 yum install -y docker-ce-19.03.9-3.el7 docker-ce-cli-19.03.9-3.el7 开启docker服务 systemctl start docker systemctl status docker 安装阿里云镜像服务器: mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://复制自己的加速器地址.mirror.aliyuncs.com"] } EOF systemctl daemon-reload systemctl restart docker 设置docker自启动 systemctl enable docker docker信息: docker -v docker version docker info 分类: docker环境信息: docker 【info|version】 容器生命周期管理: docker 【create|exec|run|start|stop|restart|kill|rm|pause|unpause】 容器操作管理: docker 【ps|inspect|top|attach|wait|export|port|rename|stat】 容器rootfs管理: docker 【commit|cp|diff】 镜像仓库: docker 【login|pull|push|search】 本地镜像管理: docker 【build|images|rmi|tag|save|import|lao】 docker images docker image ls 容器资源管理: docker 【vulume|network】 系统日志信息: docker 【events|history|logs】 docker: pull: docker pull repository:tag docker pull ubuntu:20.04 images: docker images docker image ls save: docker save repository:tag -o repository:tage o:output docker save 仓库源:标签 -o 仓库源别名:标签别名 docker save ubuntu:20.04 -o ubuntu:20 docker save ubuntu:20.04 > ubuntu:20.1 load: docker load -i repository:tag i:input docker load < repository:tag search: docker search tomcat inspect: docker inspect ubuntu:20.04 docker inspect -f {{.Size}} ubuntu:20.04 f:filter history: 一个镜像是由多个层组成的 可以使用history查看由多少层 docker history ubuntu:20.04 tag: 标记本地镜像 将其归入某一仓库 docker tag ubuntu:20.04 ubuntu:20.1 类似快照 rmi: docker rmi ubuntu:20.04 docker image rm ubuntu:20.04 docker rmi img_id run: docker 前端启动 docker run -it --rm -p 8080:8080 tomcat:9.01 ctl + c 退出运行 -p :指定端口:第一端口是宿主机端口 第二个是docker容器端口 第一个不能重复(端口冲突) 第二个不能修改 -it:interactive docker 后端启动 docker run itd -p 8080:8080 tomcat:9.01 -d : detach(分离) --rm 与 -d是不能同时使用的 logs: 日志 docker logs -f name(tomcat) 查看容器名字: docker ps 查看所有容器的名字: docker ps -a rm: docker 删除容器 docker rm name docker stop name docker rf -f name 强制删除 docker ps -q 只显示正在运行的容器id docker ps -qa 显示所有容器的id 停止运行所有的容器: docker stop $(docker ps -qa) 停止运行正在运行的容器 docker stop $(docker ps -q) 删除所有的容器: dcoker rm $(docker ps -qa) 删除所有的镜像 docker rm $(dokcer images -q) 查看所有的正在运行的容器: docker ps -a docker rm ${docker ps -qa} 创建一个容器 docker create -it --name tomcat -p 8080:8080 tomcat:9.01 docker ps -a 查看创建的docker是已经创建的状态 启动: docker start container_id 进入容器: exec: 先启动一个容器: docker run -itd --name tomcat -p 8080:8080 tomcat:9.01 dcoekr exec -it tomcat /bin/bash docekr exec -it taocmat sh 进入到内部之后 可以通过 cat /etc/issue 查看操作系统的内核版本 inspect: docker inpsect image_id/container_id/container_name kill: docker kill container_id/container_name 杀掉正在运行中的容器 docker 安装niginx: 拉取镜像: docker pull nginx:1.19.3-alpine 备份镜像: docker save nginx:1.19.3-alpine -o nginx.1.19.3.alpine.tar 导入镜像: docker load -i nginx.1.19.3.alpine.tar 运行镜像: docker run -itd --name nginx -p 80:80 nginx:1.19.3-alpine 进入容器 docker exec -it nginx sh 查看html目录 cd /usr/share/nginx/html 配置文件目录 cat /etc/nginx/nginx.conf docker 安装mysql: 拉取镜像: docker pull mysql:5.7.31 备份镜像: docekr save mysq:5.7.31 -o mysql.tar 导入镜像: docekr load -i mysql.tar 运行镜像: docker run -e 参数: -e = --env 设置环境变量 例如:向my.cnf追加参数: docker run -itd --name mysql --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin mysql:5.7.31 --character-set-server=utf8 --collation- server=utf8_general_ci privileged参数: 可以不受限制的访问自己的系统调用 容器内测试mysql: doceker exec -it mysql bash 登陆mysql mysql -u root -p use mysql; show databases; exit; docker 安装zookeeper: 拉取镜像: docker pull zookeeper:3.6.2 备份镜像: docker save zookeeper:3.6.2 -o zookeeper.tar 导入镜像: docker load -i zookeeper.tar 单机版: docker run -itd --name zookeeper --restart always -p 2181:2181 zookeeper:3.6.2 dokcer exec -it zookeeper sh cat /etc/issue 使用zooinsepctor查看 https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip 进入到build目录下 运行jar文件 java -jar zookeeper-dev-ZooInspector.jar docker 安装activermq: 拉取镜像: docker pull webcenter/activemq:5.14.3 备份镜像: docker save webcenter/activemq:5.14.3 -o acgtivemq.tar 导入镜像 docker load -i activemq.tar 单机版: docker run -itd --name activmq --restart always -p 61616:61616 -p 8161:8161 webcenter/activemq:5.14.3 docker exec -it acivemq sh cat /etc/issue docker 核心原理: 云计算: 第一层次:底层的硬件资源(cpu 硬盘 网卡等) 第二层次:不需要关心硬件系统 操作系统装好 数据库装好 直接使用 第三层次:直接使用产品 对应的是laas paas saas Laas:infrastrure-as-a-service :基础设施即服务 例如阿里云 Paas:platform-as-a-service:平台即服务 docker Saas:sofeware-as-a-service:软件即服务 offiece github等 虚拟化: 如果说现在需要一台centos mysql 临时组装的话 就有点浪费时间 于是就有了各种软件平台 负责对资源的集中管理和快速调用 如果对资源进行管理 第一步就是虚拟化 虚拟化是云计算的基础 虚拟化就是一台物理机上 运行多台虚拟服务器 这种服务器机叫做虚拟机 从 表面看 多台虚拟机是单独的服务器 ,但是他们都是共享物理机的物理资源 只是通过模拟计算机的硬件 来实现运行多台计算机系统的技术。 物理机:宿主机 虚拟机:客户机 如何完成物理资源的虚拟化工作呢:hypervisor hypervisor不是软件 是一类软件的统称 hypervisor 也称为vmm virtual marchine monitor 虚拟机监视器 它是运行在基础物理资源硬件之上的软件层 可以虚拟硬件资源 docker网络: 分为三种 docker安装后会自动创建三种网络: bridge:(默认) host: none 命令: docker network ls 理论部分: docker使用Linux的桥接网卡 在宿主机上虚拟出一个docker0的虚拟网桥 docker启动一个容器时 就会根据docker网桥的的网段分配给容器一个ip地址 称为container-ip 同时docker网桥是每个容器的默认网关 docker网桥是宿主机虚拟出来的 并不是真实存在的网络设备 外部网络是无法寻址找到的 如果希望外部访问到 可以通过映射宿主机端口 即在run容器的时候 通过-P或者-p来指定端口。 使用docker info查看网络部分 network: Network: bridge host ipvlan macvlan null overlay bridge网络: bridge的表现形式就是docker0的网路接口 容器默认都是通过docker0网络通信的。 可以通过ip a命令查看 查看网络模式: docker network ls 查看biridge模式 docker network inspect bridge 当我们启动一个容器时,bridge里containers就会有多一个元素 同时也会多一部分网卡 但是当我们启动容器之后 停止移除之后 此容器的ip就会重新分配 ip地址不固定 如果要指定一个网路模式 可以通过命令 --network host/bridge docker创建网络: docker network create -d(d:driver) 名称 注意 默认是birdge模式 docker network create -d bridge my-bridge 删除网络: docker network rm 网络名称 查看网络内容: docker network inspect 网络名称 启动指定网络: docker run --network mybridge lagou-network 172.172.0.0/24: 24代表子码掩码是255.255.255.0 172.172.0.0/16: 16 代表子码掩码 docker 数据卷: 原始数据copy: cp命令: 宿主机文件复制到容器: docker cp [options] src_path container:des_path 容器文件夹复制到宿主机: docker cp [options] container:src_path des_path 数据卷: 可以将宿主机和容器进行直接的映射 需要通过run方式进行映射 如果使用create容器再指定 会很麻烦的 数据卷的三种类型: 宿主机数据卷:(推荐) 命名的数据卷: 匿名的数据卷: 数据卷挂载命令: docker run -v /宿主机的绝对路径:容器内的目录 镜像名 通过 -v 容器内路径: ro rw 改变读写权限 ro:readonly 只读 rw:readwrite 可读可写 docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 docker run -it -v /宿主机绝对路径目录:/容器内目录:rw 镜像名 ro的权限只能是宿主机访问容器 docker挂在nexus3 https://hub.docker.com/r/sonatype/nexus3 拉取镜像: docker pull sonatype/nexus3 备份镜像: docker save sonatype/nexus3 -o nexus3 导入镜像: docker load -i nexus3 运行镜像: docker run -itd --name nexus3 sonatype/nexus3 进入镜像: docker exec -it nexus3 sh cd /nexus-data cat admin.password 浏览器访问: http://192.168.198.100:8081/ docker rm $(docker stop $(docker ps -aq)) 重新挂载: docker run -itd -p 8081:8081 --name nexus3 -v /data/nexus3/:/nexus-data/ sonatype/nexus3:3.28.1 docker logs -f nexus3 报错信息如下: mkdir: cannot create directory '../sonatype-work/nexus3/log': Permission denied docker rm -f nexus3 官方文档:授权 chown -R 200 nexus3/ docker run -d -p 8081:8081 --name nexus3 -v /data/nexus3/:/nexus-data/ sonatype/nexus3:3.28.1 查看容器启动日志 docker logs -f nexus3 命名数据卷: docker run -itd --name nginx -p 80:80 -v lagouedu-nginx:/etc/nginx nginx:1.19.3- alpine 查看数据卷: docker volume ls 查看具体的数据卷名称: 查看lagouedu-nginx宿主机目录 docker volume inspect lagouedu-nginx 找到宿主机的目录进入 匿名数据卷: docker run -itd --name nginx -p 80:80 -v /etc/nginx nginx:1.19.3-alpine docker volume ls docker volume inspect dbd07daa4e40148b11.... cd /var/lib/docker/volumes/dbd07daa4e40148b11.... 清理数据卷: docekr volume prune docker voluem ls 如果我们删除一个容器后 发现映射的数据卷缓存还在 可以使用删除命令进行清理 prune 数据卷容器: 如果用户需要在多个容器之间共享一些持续更新的数据 这个时候就需要使用数据卷容器 命令: docker run --volumes-from nginx1 nginx2 宿主机目录 数据卷容器(假设是centos) mysql1 mysql2 第一步: 将centos和宿主机进行关联 docker run -d --name data-volume -v /data/nginx:/usr/share/nginx/html -v /data/mysql:/var/lib/mysql centos:7.8.2003 第二步: 将nginx和mysql和数据卷容器进行关联 docker run -itd --name nginx01 -p 80:80 --volumes-from data-volume nginx:1.19.3- alpine echo "lagouedu nginx" > /data/nginx/index.html http://192.168.198.100 docker run -itd --name nginx02 -p 81:80 --volumes-from data-volume nginx:1.19.3- alpine http://192.168.198.100:81 docker run -itd --name mysql01 --restart always --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci docker run -itd --name mysql02 --restart always --privileged=true -p 3307:3306 -e MYSQL_ROOT_PASSWORD=admin --volumes-from data-volume mysql:5.7.31 -- character-set-server=utf8 --collation-server=utf8_general_ci docker-compose: 一个应用是多个微服务组成 因此 一个微服务就是一个容器 就需要多个容器一起执行 多个容器协同工作 compose就是容器的管理工具 compose可以简化容器的构建和运行 是为了定一个或多个容器运行和应用的工具 compose使用yaml来定义多个容器之间的关系。 一个docker-compose up就可以把所有的应用跑完 docker-compose的安装: 下载: https://github.com/docker/compose 授权: mv /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose cp /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose chmod 777 /usr/local/bin/docker-compose docker-compose的安装版本: docker-compose -v docker-compose --version docker-compose version 卸载docker-compose: rm -rf /usr/local/bin/docker-compose reboot docker-compose默认使用docker-compose.yml 也可以通过使用-f参数指定具体文件 docker-compose包含四个一级key: version:并非指的是compose或者docker引擎的版本 services:定义不同的应用服务 networks:指引网络服务 volumes:创建卷 安装docker私服: 官方私服地址: https://hub.docker.com/_/registry 拉取镜像: docker pull registry:2.7.1 备份镜像: docker save registry:2.7.1 -o registry.2.7.1.tar 加载镜像: docker load -i registry.2.7.1.tar 运行镜像: docker run -itd -p 5000:5000 --name registry --restart=always registry:2.7.1 添加私服地址: 编辑配置文件 vi /etc/docker/daemon.json 增加仓库配置信息 { "insecure-registries":["192.168.198.101:5000"] } 重启docker: systemctl daemon-reload systemctl restart docker 查看docker是否添加: docker info 浏览器测试: http://192.168.198.101:5000/v2/_catalog 上传镜像: doceker tag nginx:1.2 192.1.68.2:5000/nginx:v1 docker push 192.1.68.2:5000/nginx:v1 浏览器测试: http://192.168.198.101:5000/v2/nginx/tags/list 企业私服: harbor官网地址: https://goharbor.io/ github 官网地址: https://github.com/goharbor/harbor 官方帮助文档: https://github.com/goharbor/harbor/blob/v1.9.4/docs/installation_guide.md 验证docker-compose docker-compose -v 开发环境使用的http 但是生产使用的是https 1.解压软件 cd /data tar zxf harbor-offline-installer-v1.9.4.tgz 2.进入目录: cd harbor 3.修改配置文件 vi harbor.yml 3.1修改私服镜像地址 hostname: 192.168.198.101 3.2修改镜像地址访问端口号 port: 5000 3.3harbor管理员登录系统密码 harbor_admin_password: Harbor12345 3.4修改harbor映射卷目录 data_volume: /data/harbor 4.安装harbor 4.1执行启动脚本,经过下述3个步骤后,成功安装harbor私服 ./install.sh 4.2准备安装环境:检查docker版本和docker-compose版本 4.3加载harbor需要的镜像 4.4准备编译环境 4.5启动harbor。通过docker-compose方式启动服务 4.6google浏览器访问harbor私服 http://192.168.198.101:5000 username: admin password: Harbor12345 5.配置私服: vi /etc/docker/daemon.json "insecure-registries":["192.168.198.101:5000"] 重启docker服务: systemctl daemon-reload systemctl restart docker 新建项目: 在harbor中新建公共项目: laogouedu 登陆私服: docker login -u admin -p Harbor12345 192.168.198.101:5000 退出: docker logout 192.168.198.101:5000 上传nginx: docker tag mariadb:10.5.2 192.168.198.101:5000/lagouedu/nginx:1.19.3-alpine docker push 192.168.198.101:5000/lagouedu/nginx:1.19.3-alpine docker pull 192.168.198.101:5000/lagouedu/mariadb:10.5.2
Docker的常规操作使用
最新推荐文章于 2023-08-16 15:40:07 发布