什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
Docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术
Docker的三要素:镜像,容器,仓库。
- Docker镜像就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器。
- 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
- Docker 仓库是用来包含镜像的位置,Docker提供一个注册服
务器(Register)来保存多个仓库,每个仓库又可以包含多个
具备不同tag的镜像。
Docker运行中使用的默认仓库是 Docker Hub 公共仓库。
容器技术—— “一次打包、随处运行”使资源调度、微服务更容易,解决了应用发布过程中,最头疼的环境一
致性问题
Docker常用命令
启动docker systemctl start docker
重启docker服务 systemctl restart docker
关闭docker服务 systemctrl stop docker
镜像命令
- docker images 列出本机上的镜像
REPOSITORY:表示镜像的仓库源,同一仓库源有不同的TAG,代表不同的版本。我们用REPOSITORY:TAG来表示不同的镜像。
docker images -a 列出所有镜像
docker images -q 只显示镜像的ID
docker images --digests 显示镜像的摘要信息
docker images --no-trunc 显示完整的镜像信息 - docker search(某个镜像的名字)
docker search tomcat 去docker官网上查tomcat镜像 - docker pull … 下载某个镜像 不加版本默认下载最新的latest版本
docker pull tomcat
- docker rmi 某个镜像的名字ID
docker rmi -f 强制删除某个镜像
docker rmi -f A B docker rmi -f hello-world nginx 删除多个镜像 中间用空格连接下个删除的镜像
docker rmi -f$(docker images -qa) 删除全部的镜像
容器命令
有镜像才能创建容器
-
docker run [options] image [COMMAND] [ARG…] 新建并启动容器
常用启动 docker run -it 后面跟镜像ID,NAME
docker attach 容器名 重新进入该容器 -
docker ps 启动容器后,在Linux中使用命令,查看正在运行的容器
-
exit 退出容器,ctrl+P+Q 容器不停止退出
-
docker start +ID 启动容器
-
docker restart +ID 重新启动容器
-
docker stop +ID 停止容器
-
docker kill +ID 强制停止
-
docker rm +ID 删除容器
-
docker rm $(docker ps -aq) 删除所有容器
-
docker run -d 容器名 启动守护式容器 后台运行,
docker ps 查不出来 -
docker logs +ID ,docker logs -t -f --tail 3
查看日志 -
docker commit 提交容器副本生成一个新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID要创建的目标镜像名:[标签名]
运行tomcat
docker run -it -p 8080:8080 tomcat
docker run -it -P tomcat 随机分配端口
运行nginx
docker run -p 8080:80 -d nginx:1.17.8
运行mysql
docker run -p 3306:3306 --name mysql
-v /hxg/mysql/conf:/etc/mysql/conf.d
-v /hxg/mysql/logs:/logs
-v /hxg/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=20010320
-d mysql:5.7
docker ps 查出来容器的id
进入mysql容器 docker exec -it 802d56b930fc /bin/bash
mysql -uroot -p 输入mysql数据库密码
运行redis
安装完成后,我们可以使用以下命令来运行 redis 容器:
docker run -itd --name redis-test -p 6379:6379 redis:3.2
接着我们通过 redis-cli 连接测试使用 redis 服务
docker run -itd --name redis-test -p 6379:6379 redis
redis-cli
Docker容器数据卷
将运用于运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的,容器之间希望又可能共享数据。
Docker容器产生的数据,如果不通过docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
为了能保存数据在docker中我们使用数据卷。
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /myDataVolume:/dataVolumeContainer(:ro) centos
加上:ro,相当于加了权限,容器只能读文件,不能写。
容器和宿主机之间数据共享,在宿主机myDataVolume目录下创建文件,在容器的dataVolumeContainer目录下也又该文件,并数据共享,可以操作数据。
容器停止退出后,主机修改后数据同步。
用dockerfile文件创建数据卷
DockerFile
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程等
Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行Docker镜像时,会真正开始提供服务。
Docker容器,容器是直接提供服务的。
DockerFile体系结构(保留字指令)
- FROM 基础镜像,当前新镜像是基于哪个镜像的
- MAINTAINER 镜像维护者的姓名和邮箱地址
- RUN 容器构建时需要运行的命令
- EXPOSE 当前容器对外暴露出的端口
- WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
- ENV 用来在构建镜像过程中设置环境变量
- ADD 将宿主机目录下的文件拷贝镜像且ADD命令会自动处理URL和解压tar压缩包
- COPY 类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内的<目标路径>位置 - VOLUME 容器数据卷,用于数据保存和持久化工作
10.CMD 指定一个容器启动时要运行的命令
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换 - ENTRYPOINT 指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数 - ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
上传镜像到阿里云
$ docker login --username=houx****ng666 registry.cn-shanghai.aliyuncs.com
$ docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/houxugang/mydocker:[镜像版本号]
$ docker push registry.cn-shanghai.aliyuncs.com/houxugang/mydocker:[镜像版本号]
上传详情请查看阿里云镜像容器服务官方文档