Docker基础

Docker基础

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
在这里插入图片描述
在这里插入图片描述

Docker架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
    Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Docker的应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

在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

镜像操作

在这里插入图片描述

/usr/bin/docker build -f Dockerfile -t 镜像名 .  
/usr/bin/docker push 镜像名

容器操作

搜索镜像 
[root@localhost ~]# docker search tomcat 

拉取镜像 
[root@localhost ~]# docker pull tomcat 

复制镜像(更改镜像名)
docker tag IMAGE ID(要复制的原镜像的ID) REPOSITORY:TAG(复制后的镜像的REPOSITORY和TAG)

删除镜像
docker rmi IMAGE ID  # 根据镜像ID删除镜像
docker rmi REPOSITORY:TAG  # 当复制镜像的时候,复制后的镜像的ID和原镜像的ID一样,docker rmi IMAGE ID这个指令就无法删除镜像了,这时候就要用docker rmi REPOSITORY:TAG来删除镜像了。

根据镜像ID启动容器 
docker run IMAGE ID 

导出镜像
docker save -o nginx.tar nginx:latest
docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
导出的镜像在虚拟机执行命令所在的目录

导入镜像
docker load -i nginx.tar
docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

查看运行中的容器 
docker ps 

停止运行中的容器 
docker stop 容器的id 

查看所有的容器 
docker ps ‐a 

启动容器 
docker start 容器id 

删除容器 
docker rm 容器id 

docker run [--name 容器名] [--rm] [-it] [-d] [-p 宿主机端口:容器端口 ] 镜像名:标签 [容器启动命令]
--name 指定容器名
--rm   执行后删除
-it    进入容器进行交互
-d     保存后台运行不退处
-P     随机端口映射,从32768开始
-p     宿主机端口:容器端口 指定端口映射
-e     MYSQL_ROOT_PASSWORD=123456 初始化root用户的密码
-d     表示使用守护进程运行,即服务挂载后台运行
-v     使用主机目录和容器目录映射来完成数据的持久化

启动容器
docker run -it --network=host -d 300e315adb2f /bin/bash

进入容器
docker exec -it 6959c31403d3 /bin/bash

主机和容器之间复制文件和目录
docker cp 6959c31403d3:usr/lib/test.txt /root/test/
docker cp /root/test/test.txt 6959c31403d3:usr/lib/

Linux之间复制文件和目录
scp -P22 linux_0.1.zip root@127.0.0.1:/root/test

启动Centos容器时更正时区,开启SSH
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime&&/usr/sbin/sshd -D

为了演示简单关闭了linux的防火墙 
service firewalld status ;查看防火墙状态 
service firewalld stop:关闭防火墙 

查看容器的日志 
docker logs container‐name/container‐id

docker mysql

--普通启动mysql
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker ps
docker exec -it 6959c31403d3 /bin/bash
mysql -u root -p
show databases;
select host, user, authentication_string, plugin from user;
CREATE DATABASE IF NOT EXISTS `test` DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
USE `test`;

CREATE TABLE IF NOT EXISTS `users` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `username` VARCHAR(50) NOT NULL,
  `email` VARCHAR(100) NOT NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--挂载数据卷启动mysql
--启动demo mysql,以复制配置文件
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 ae0658fdbad5

--本地创建数据卷路径
mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf
docker cp 4f08a9d1fcd3:/etc/mysql/. /root/mysql/conf

--初始化mysql配置文件 *.cnf
touch /root/mysql/conf/my.cnf

--删除demo mysql容器
docker stop a97562ff9f12
docker rm a97562ff9f12

--启动mysql
docker run -d --name mysql -p 3306:3306 \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/logs:/var/log/mysql \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--privileged=true \
ae0658fdbad5

--验证配置是否成功
docker stop a97562ff9f59
docker restart a97562ff9f59

docker redis

docker run --name redis -p 6379:6379 -d 74d107221092 redis-server --appendonly yes --requirepass 123456
--name redis:指定容器的名称为redis。
-p 6379:6379:将宿主机的6379端口映射到容器的6379端口。
-d:在后台运行容器。
74d107221092:指定要运行的Docker镜像。
redis-server --appendonly yes --requirepass 123456:这些是传递给Redis服务器的命令行参数,用于启用AOF持久化并设置密码。

docker RabbitMQ

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin 263c941f71ea

5672是RabbitMQ的AMQP端口,用于应用程序与RabbitMQ之间的通信;15672是RabbitMQ的管理插件端口,用于Web管理界面。

RabbitMQ的管理界面默认运行在容器的15672端口上,由于已将这个端口映射到了宿主机的15672端口,所以可以直接在浏览器中输入http://<宿主机IP>:15672来访问管理界面。使用之前设置的用户名(默认为admin)和密码(默认为admin)登录即可。

docker tomcat

启动一个做了端口映射的tomcat 
docker run ‐d ‐p 8888:8080 tomcat 
‐d:后台运行 
‐p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口

参考文章:
Docker 架构 | 菜鸟教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值