包含三种命令,build,share,run。
有三个模块,包括client, docker主机和应用市场。其中主机安装和启动docker程序,应用市场保存上传的应用(镜像),client提供请求。我们的操作在client上进行。
在需要启动镜像时,首先输入docker pull XX,把镜像从应用市场下载到主机。然后输入docker run XX,来启动主机内的镜像,生成的应用称为容器。
在想要上传自己的镜像时,首先输入docker build XX,把镜像上传到主机,然后输入 docker pull XX,来把镜像从主机上传到应用市场。.
容器
在传统应用中,应用不相互隔离,可能会相互影响。进而推出把应用放进虚拟机中,但是这样虚拟机包括操作系统等占用大量空间,所有有了容器。可以看作是虚拟机的简化版本,容器包含了应用运行的所有需要,并且相互隔离,有自己的文件系统。
操作
下载安装,在
Install Docker Engine on Ubuntu | Docker Docs
在左侧选择操作系统,然后按步骤走。ubuntu少了启动,在配置好后需要加上
sudo systemctl enable docker --now
sudo一定要加,不然要求密码。
在下载镜像时,可以通过配置json更换源,来加速运行。
sudo tee /etc/docker/daemon.json <<- 'EOF'
> {
> "registry-mirrors":["https://mirror.ccs.tencentyun.com"]
> }
> EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
实验
查找nginx,先进入root,不然命令被拒绝
docker pull nginx 从应用市场下载到主机
下载指定镜像,需要挂梯子在http://hub.docker.com/找
docker images 查看主机现在有的镜像
删除主机镜像,需要把容器关闭再删
查看容器 docker ps -a会显示包括停止的
docker stop XX 停止容器
docker rm XX 删除容器,注意和rmi的区别。docker rm -f XX强制删除
docker logs XX 显示容器的日志
端口映射
由于nginx的端口是容器内的,外部无法访问,所以需要一个端口映射。-p
8080是外部端口,80是容器端口。mynginx自定义名字
进入容器docker exec -it name /bin/bash
由于过于轻量级,所以不能vim,使用echo "<h1>Hello,Docker.</h1>" > index.html给html添加信息
exit 退出容器
保存镜像
输出信息
加上镜像名和版本
把镜像下载到本地,-o 可以指定格式和名字,这里为tar。注意V要大写
docker load -i mynginx.tar 从本地上传镜像到主机(通常为tar)
docker build XXX 上传dockerfile到主机
docker run -d --name app01 -p 8080:80 mynginx:V1.0 -d表示为后台启动,--name指定容器名
上传镜像到社区(应用仓库)
进入官网登录,可以查看已经上传的
客户端登录,docker login,可能需要再浏览器激活
登陆后上传 docker tag XXX username/XXX,版本号为latest,可以在push时不指定版本号
从应用市场下载指定镜像
指定目录挂载
docker run -d -p 8080:80 -v /home/zjx/share/:/usr/share/nginx/html --name mynginx nginx
:之前为本地目录,之后为容器目录
不知道为啥本地不显示,心态崩了,卷挂载不想搞了,直接下一个
docker网络
在启动docker后,会创建一个网段
查看某一个容器的细节,container可以省略
查看容器对应网络
进入容器来查看另一个容器的信息 curl ip:port 注意port是容器内部的,不是外部端口
由于在容器的删除和创建时IP不断变化,所以使用域名映射
首先创建一个网络 docker network create mynet
查看网络 docker network ls,注意创建的是桥接网络
使用网络来建立容器
测试,创建两个容器,进入一个,直接用容器名代替ip
使用docker配置redis集群.
剩下的操作在尚硅谷3小时速通Docker教程,雷神带练docker部署到实战!_哔哩哔哩_bilibili
不知道为什么hubdocker访问失败