1.镜像相关命令
- 镜像名称一般分为两部分:[repository]:[tag]。
- 在没有指定tag时,默认是latest,镜像代表最新版本。
比如mysql:5.7 mysql指的是repository,5.7是tag。
docker builder构建镜像 dicker images 查看本地镜像 docker rmi xxx 删除镜像 docker push 将镜像推到远程仓库 docker pull 拉取镜像 docker save保存镜像为压缩包 docker load 加载压缩包为镜像
2、使用
1.首先,去镜像仓库搜索nginx镜像,比如https://registry.hub.docker.com/
你可以进去查看我们可以获得的一些信息
2.根据查看的镜像信息,拉取指定版本或最新版本
sudo docker pull nginx
3.查看本地镜像
sudo docker images
其他命令:
sudo docker save -o nginx.tar nginx:latest #保存为tar sudo docker rmi nginx:latest #删除 sudo docker load -i nginx.tar #加载tar为镜像 docker load --help #查看load命令
3、容器命令
3.1.创建一个操作Nginx容器
docker run --name containerName -p 80:80 -d nginx
命令解读:
- docker run :创建并运行容器
- –name : 给容器起个名字
- -p :映射宿主机端口和容器端口,宿主机端口在冒号左侧,容器端口在右侧
- -d:容器在后台运行
- nginx:例如,镜像名nginx
3.2、查看日志
docker logs -f xxx
查看名字为xxx的容器日志
3.3.进入刚才的容器
docker exec -it mn bash
命令解读:
- docker exec :进入容器内部,执行一个命令
- -it : 为当前进入的容器创建标准输入输出终端,允许我们与容器交互
- mn :进入容器的名称
- bash:进入容器后执行的命令,bash是一个linux终端交互命令
exit是退出
3.4、进入nginx html目录
cd /usr/share/nginx/html
修改index.html
sed -i 's#Welcome to nginx#hello#g' index.html sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
不建议在容器中修改文件,非常不方便。
3.5、总结
每个命令都可以在后面添加–help查看用法。
比如docker ps --help可以知道,docker ps -a 命令可以查看所有容器,docker ps只能看大容器。
nginx容器启动后,localhost访问成功。
4.容器与数据耦合
4.1.存在的问题
4.2、数据卷
(volume)指向宿主机文件系统中的某一目录的虚拟目录。
我们可以将容器中的文件绑定到数据卷中,这样不同的容器就可以共享相同的文件。
4.3、操做数据卷
docker volume [COMMAND] #docker volume命令是根据命令后跟随的数据卷操作command确定下一步: create 创建一个volume inspect 显示一个或多个volume的信息 ls 列出所有的volume prune 删除未使用的volume rm 删除一个或多个指定的指定volume
1.创建数据卷
列出所有数据卷
3.显示数据卷信息
Mountpoint:指真实目录
4.删除未使用的数据卷
5.挂载数据卷
当我们创建容器时,我们可以通过 -v 将数据列入容器目录
docker run \ #docker run :创建和运行容器 --name mn \ #--name mn :给容器起个名字叫mn -v html:/root/html \ #-v html:/root/htm :把html数据卷挂载到容器/root/html这个目录中 -p 8080:80 #-p 8080:80 :将宿主机的800端口映射到容器的808端口/spa> nginx \ #nginx :镜像名称
我们先把之前创建的容器都删除了,然后创建新的:
可以看到,容器中的文件跑到了真实的目录下:
这样就可以用vi修改了。而且其他容器也能共享这些文件。
6、宿主机目录挂载
6.1、差异
之前是将容器目录挂载到数据卷下,这种方式是交给docker管理,目录比较深。
我们还可以直接挂载到我们指定的目录下。
6.2、操作
目录挂载与数据卷挂载的语法是类似的:
-v [宿主机目录]:[容器内目录]
-v [宿主机文件]:[容器内文件]
比如:
docker run --name mn -p 80:80 -v /home/dev/nginx/:/usr/share/nginx/html/ -d nginx
自己测试,这样不会自动创建出文件。
7、自定义镜像
7.1、镜像结构
镜像是分层结构,每一层称为一个Layer
- BaseImage层:包含基本的系统函数库、环境变量、文件系统
- Entrypoint:入口,是镜像中应用启动的命令
- 其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置
7.2、什么是Dockerfile
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./mysql-5.7.rpm /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN yum install gcc |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder