# 安装 #1.查看内核版本(3.10以上的可以安装) uname -r #2.使用yum安装 (如果缺少以来的话使用yum -y update) yum -y install #3.查看是否安装成功(出现client server两部分的时候安装成功) docker version #启动docker systemctl start docker #添加开机自启 systemctl enable docker #卸载docker #1.卸载之前先暂停已经开启的docker systemctl stop docker #2.检查安装过的包 yum list installed | grep docker #3.卸载查询出来的已安装软件 yum remove 软件名 #4.删除已经安装的容器和镜像等 rm -rf /var/lib/dockerdocker 配置阿里云镜像加速
1.去阿里官网 https://www.aliyun.com/ 点击控制台
2.点击容器镜像服务-》镜像工具-》镜像加速器
3.根据描述步骤操作
docker指令docker [指令] --help #docker查看指令帮助文档docker镜像
docker运行容器之前需要镜像,如果镜像不存再本地,就去远程仓库拉取。
docker pull NAME[:tag]#拉取镜像 -q#只显示镜像的id docker images #查看本地有的镜像 docker rmi NAME[:tag] #删除本地镜像,注意删除前要先删除本地已经运行该镜像的容器,如果患有运行该镜像的容器,不会真正删除 -f#强制删除 docker search NAME[:tag]#搜索dockers镜像在dockerhub上dockers容器
docker镜像的运行实例。
docker ps #docker正在运行的容器列表 -a #查询所有容器(包括已经运行过现在不运行的) -q #显示容器的id docker creart [option] NAME[:tag] #创建一个docker容器,但是不运行 -p #指定端口 宿主机端口:docker容器内的端口 docker start ID#启动已有的容器 docker run [option] NAME[:tag] [args] #创建并运行一个dockers容器 -d #后台运行 -p #端口 -i #交互模式运行 -t #分配伪终端 -v #挂载数据卷 -e #设置环境变量 docker stop ID#停止容器 docker kill ID#强制停止 docker rm#删除容器 -f#删除正在运行的容器 docker exec [option] NAME [args] -i #交互 -t #分配伪终端 docker logs [option] NAME|ID #查看容器日志 -f #跟踪日志输出 -t #显示时间措
案例1:创建一个redis容器,端口为16379
docker create -p 16379:6379 --name myredis redis:4.0 #创建docker容器,但是不运行 docker ps -a #查看已经创建的容器,可以看到status是Create和该容器的id号等信息 docker start 632 #启动已有的容器(后面跟的是ps查出来的id,几位能唯一标识就可以,不需要全写) docker exec -it myredis /bin/bash #进入docker容器查看,ctrl+d或exit可以退出 docker logs -f myredis #查看容器日志docker 仓库
存放docker镜像的地方
1.创建阿里个人镜像仓库 https://cr.console.aliyun.com/#/imageList
2.开通镜像仓库服务-》创建命名空间-》创建仓库-》
3.执行登录操作:sudo docker login --username=用户名 registry.cn-hangzhou.aliyuncs.com,密码是刚刚开启服务的时候的密码
4.给要上传的镜像打标签 docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ffd/myredis:[镜像版本号]
5.推送镜像到阿里云 docker push registry.cn-hangzhou.aliyuncs.com/ffd/myredis:[镜像版本号]
6.点击镜像版本,查看上传情况
数据卷-v 宿主机目录:容器内目录
把运行容器中的数据内容挂在宿主机上面,防止丢失。
在create或者run容器的时候,通过-v参数指定宿主机的目录挂载在容器的某一个目录上,这样容器的目录就和宿主机的目录数据同步了。
案例2:将mysql的数据放在主机的/data/mysql-data中
docker pull mysql:5.7 #1.拉取mysql容器 docker create --name mysql13306 -v /data/mysql-data:/var/lib/mysql -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 #创建容器 docker start mysql13306拷贝
除了数据卷挂载目录外也可以使用cp指令,在宿主机和容器之间相互拷贝数据。
dcoker SRCDIR TAGETDIR #源地址 目的地址 (容器内的目录要在地址前面加容器ID:)构建镜像 Dockerfile文件编写
dockerfile是一个文本文件,描述镜像构建的细节(这里为了方便看,命令使用了小写,建议使用大写)
1. from#基于的基础镜像 2. maintainer #维护者的信息 3. run | run ["executable","param1",param2] #前者将会在shell终端运行命令,即/bin.sh -c #后者使用exec执行,指定使用其他终端可以通过第二种方式实现,如 run ["/bin/bash","-c","echo hello"] # 每条run指令将在当前镜像基础上执行指定命令,并提交新的镜像。当命令较长的时候可以使用来换行 4. cmd ["executable","param1","param2"] #使用exec执行 cmd command param1 param2 #在/bin/sh中执行,提供给需要交互的应用 cmd ["param1","param2"] #提供给enterpoint的默认参数 #指定启动容器时执行的命令,每个dockerfile只能有一条cmd命令,有多条只有最后一条会执行 #如果用户启动容器的时候指定了运行的命令,则会覆盖掉cmd指定的命令 5. expose [ ...] #告诉docker服务端容器暴露的端口号,供互联系统使用。在启动容器时需要 # 通过-P,docker主机会自动分配一个端口转发到指定的端口,-p可以具体指定到哪个本地端口映射过来 6. env #指定一个环境变量,会被后续run指令使用,并在容器运行时保持 7. add #该命令将复制4指定的 到容器中的 .其中 可以是dockerfile所在目录 #的一个相对路径(文件或目录);也可以是一个url,还可以是一个tar文件(自动解压为目录) 8. copy #该命令将复制 到容器中的 。如果目标路径不存在会自动创建 #当使用本地目录为源目录时,推荐使用copy 9. entrypoint ["executable","param1","param2"] entrypoint command param1 param2(shell中执行) # 入口 配置容器启动后执行的命令,并且不可被docker run 提供的参数覆盖 10. volume ["/data"] #挂载 创建一个可以以本地主机或其他容器挂载的挂载点,一般用来存放数据库 11. user deamon #指定运行容器时的用户名或uid,后续run也会指定用户。 12. workdir /path #为后续的run,cmd,entrypoint指令配置工作目录 13. onbuild [insertuction] #配置当所创建的镜像作为其他新创建容器的基础镜像时,所执行的操作命令
案例3:自己创建redis镜像
在官网下载redis的tar.gz安装包,放在需要创建镜像的目录下,并在这个目录下编写dockerfile
vi Dockerfile,拷贝如下内容 构建Redis镜像 niaopeng #基于Centos7构建 FROM centos:7 #安装依赖 RUN yum -y install tar cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl #创建安装目录 RUN mkdir -p /redis/data && cd /redis #拷贝redis的安装包 COPY ./redis-5.0.0.tar.gz /redis #解压 RUN cd /redis && tar -xvf redis-5.0.0.tar.gz && rm -rf redis-5.0.0.tar.gz && cd redis-5.0.0 #编译、安装 RUN cd /redis/redis-5.0.0 && make && make install #复制配置文件到/redis中,并且修改redis为后台运行 RUN cp /redis/redis-5.0.0/redis.conf /redis/ && echo "daemonize yes" >> redis.conf #设置数据挂载目录以及工作目录 VOLUME /redis/data WORKDIR /redis/data #容器启动后执行该命令 ENTRYPOINT ["/usr/local/bin/redis-server", "/redis/redis.conf"] #设置对外的端口号 EXPOSE 6379
docker build -t myredis ./ #根据dockerfile构建docker镜像 -t#指定导出镜像名导入导出
docker export [option] ID > NAME #导出容器快照到本地文件,容器id,导出文件名 docker import [option] file|URL| [NAME] #从文件中创建镜像 docker save [option] IMAGE #导出指定的镜像保存成tar归档文件 docker load < FILE #导入tar变成镜像容器构建镜像
docker commit [option] ConTAINER [IMG:tag] #-a 提交镜像作者 #-m 提交时的说明文字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nq4h8RAO-1636012664650)(C:homecachenodeImg1636007007566.png)]
容器连接-P #create run命令使用,把容器上的端口随机映映射导宿主机的端口
-p 宿主机端口:容器端口#create run指令使用,把容器上宿主机的端口手动映射起来
docker port NAME #列出指定容器的端口映射情况
docker network create -d bridge NET-NAME #创建一个新的docker网络
docker run --network NET-NAME centos #可以指定容器的网络连接导指定的地方
#使用上面这两个方式可以实现容器互联,也可以使用docker-compose
#在宿主机的/etc/docker/deamon.json文件中添加以下内容设置全部容器的dns
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
dockers compose
定义和运行多个容器docker应用程序的工具,通过compose,可以使用yml文件来配置应用程序需要的所有服务。
1.使用dockerfile定义应用程序环境
2.使用docker-compose.yml定义构成应用程序的服务
3.执行docker-compose up命令来启动并运行整个应用程序
# yaml 配置实例
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
docker-compose安装:
1.获取docker-compose的最新版本
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2.给二进制执行文件授权
chmod +x /usr/local/bin/docker-compose /usr/bin/docker-compose
3.创建软链:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4.查看是否安装成功
docker-compose --version



