Docker可以把项目和它所依赖的环境整合打包,非常方便!
Docker的思想就来自于集装箱,应用之间相互隔离,隔离的思想
Docker通过隔离机制,将服务器利用到极致
仓库Docker Hub :https://hub.docker.com/
安装
docker 依赖运行的Linux内核环境,必须安装在Linux系统之上
CentOS(64-bit) 7上 内核版本3.8以上
查看内核版本
[root@XiangCheng /]# cat /etc/redhat-release CentOS Linux release 8.4.2105 [root@XiangCheng /]# uname -r 4.18.0-305.3.1.el8.x86_64 [root@XiangCheng /]#
三件套:
镜像(image): 就是一个模板,可以用来创建Docker容器,就像面向对象中的类
容器(container):镜像的实例对象
仓库(repositiroy):集中存放镜像的场所
官方安装文档:https://docs.docker.com/engine/install/centos/
先卸载旧版本,没有可以忽略
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装gcc相关依赖
yum -y install gcc yum -y install gcc-c++
设置存储库
1.安装yum-utils包(提供yum-config-manager 实用程序)并设置稳定的存储库。
$ sudo yum install -y yum-utils # 因为官方文档设置仓库地址是国外,这样会导致会很慢, # 设置阿里云仓库 $ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 更新一下yum软件包 索引 yum makecache fast
安装 启动 docker
# 安装docker sudo yum install docker-ce docker-ce-cli containerd.io # 启动docker sudo systemctl start docker # 查看doker 版本 docker version # hello-world 通过运行映像来验证 Docker 引擎是否已正确安装。 sudo docker run hello-world
卸载docker
# 停止docker服务 systemctl stop docker # 移除docker 应用 yum remove docker-ce docker-ce-cli containerd.io # 删除docker遗留文件 rm -rf /var/lib/docker rm -rf /var/lib/containerd
配置阿里云镜像加速器
命令
帮助启动类
# 启动docker systemctl start docker # 停止docker systemctl stop docker # 重启docker systemctl restart docker # 查看docker 状态 systemctl status docker #开机启动 systemctl enable docker # 查看docker 概要信息 docker info # 查看docker 总体帮助文档 docker --help # 查看docker 命令帮助文档 docker 具体命令 -help
镜像命令
# 罗列出本机的镜像
docker images
# 罗处所以本机image ID
docker images -qa
REPOSITORY : 镜像的仓库源
TAG : 镜像的标签
IMAGE ID : 镜像ID
CREATED : 镜像创建时间
SIZE : 镜像大小
同一仓库源可以有多个tag版本,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像,如果你不指定以一个镜像的版本标签,例如你只使用ubuntu,docker将默认使用ubuntu:latest
# 去仓库查看某镜像
docker search [OPTIONS] 某镜像名字
--limit n : 只列出排名前n个镜像
NAME: 镜像名称
DESCRIPTION: 镜像说明
STARS: 点赞数量
OFFICIAL: 是否是官方的
AUTOMATED: 是否是自动构建的
# 拉取某个镜像,没有TAG默认最新版本 docker pull 镜像名字[:TAG] # 查看镜像 容器 数据卷所占的空间 docker system df
TYPE : 种类
Images(镜像) 、 Containers(容器 )、 Local Volumes ( 本地卷) Build Cache(构建缓存)
TOTAL : 总数
ACTIVE : 活动中
SIZE : 大小
RECLAIMABLE : 伸缩性
# 删除镜像 docker rmi [镜像名称|镜像ID] # 强制删除镜像 docker rmi -f [镜像名称|镜像ID] # 删除多个 docker rmi -f [镜像名称1:TAG 镜像名2] # 删除所有imgaes docker rmi -f $(docker images -qa)
容器命令
拉取系统镜像
# 创建centos 镜像
docker pull centos
# 创建ubuntu 镜像
docker ubuntu
新建启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] [OPTIONS] --name="容器名" :为容器指定一个名称 -d : 后台运行容器并返回容器ID,也即启动守护式容器(后台运行) -i :以交互式模式运行容器,通常与 -t 同时使用 -t : 为容器重新分配一个伪输入终端,通常与-i 同时使用;也即启动交互式容器(前台有伪终端,等待交互) -P :随机端口映射,大写P -p :指定端口映射,小写p # 实例化一个ubuntu系统 docker run -it ubuntu /bin/bash
参数 |
说明 |
-p hostPort:containerPort |
端口映射 -p 8080:80 |
-p ip:hostPort:containerPort |
配置监听地址 -p 10.0.0.100:8080:80 |
-p ip::containerPort |
随机分配端口 -p 10.0.0.100::80 |
-p hostPort:containerPort:udp |
指定协议 -p 8080:80:tcp |
-p 81:80 -p 443:443 |
指定多个 |
# 列出当前所有正在运行的容器实列 docker ps [OPTIONS] [OPTIONS] -a:列出当前所有正在运行+历史上运行过的容器 -l:显示最近创建的容器 -n:显示最近n个创建的容器 -q:静默模式,只显示容器编号 # 退出容器 退出后容器停止 exit #退出容器 容器不停止 ctrl+p+q # 启动已停止运行的容器 docker start [容器ID|容器名] # 重启容器 docker restart [容器ID|容器名] # 停止容器 docker stop [容器ID|容器名] # 强制停止容器 docker kill [容器ID|容器名] #删除已停止的容器 ,如果未停止强制删加 -f 参数 docker rm 容器ID # 删除所有的容器 docker rm -f $(docker ps -a -q) docker ps -a -q | xargs docker rm # 查看某容器日志 docker logs [容器ID|容器名] # 进入正在运行的容器 docker exec -it [容器ID] /bin/bash 推荐 docker attach [容器ID] # 把容器内的文件复制到主机 docker cp 容器ID:容器内路径 目的主机路径 # 导出容器,做备份 docker export 容器ID > 文件名.tar # 导入一个镜像 cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号
安装一些软件
tomcat
# 拉取tomcat 镜像 docker pull billygoo/tomcat8-jdk8 # 直接执行,没有会自动拉 docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
mysql
# 安装镜像 docker pull mysql:5.7 # 创建一个简单容器 docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=hd123456 -d mysql:5.7 # 创建mysql挂上数据卷 docker run -d -p 3306:3306 --privileged=true -v /xc/mysql/log:/var/log/mysql -v /xc/mysql/data:/var/lib/mysql -v /xc/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=hd123456 --name mysql01 mysql:5.7 SHOW VARIABLES LIKE 'character%'
在宿主机 conf下 :
vi my.cnf # 输入以下数据 [client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8 # 在重启容器 docker restart mysql01