注意: 容器没有后台进程的概念,必须前台运行
镜像命令
命令 | 描述 | ||||
---|---|---|---|---|---|
docker images php | 查看名字为php的镜像 | ||||
docker images | 查看所有镜像 | ||||
docker search | 搜索镜像 | ||||
docker pull 镜像名:tag | 拉取镜像 | ||||
docker rmi php | 删除php镜像 | ||||
(保存php镜像到目录) docker image save php > D:\phpstudy_pro\WWW\docker\php.tgz 或者 (保存多个镜像到一个文件) docker save -o D:\phpstudy_pro\WWW\docker\php.tgz php:8.1.20-fpm nginx:1.25.0-perl | 导出docker镜像到本地
| ||||
docker load < D:\phpstudy_pro\WWW\docker\php.tgz 或者 docker load -i D:\phpstudy_pro\WWW\docker\php.tgz | 从本地镜像导入到docker
| ||||
docker image inspect 镜像名/镜像id | 查看镜像详系信息 |
容器命令
命令 | 描述 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
docker ps | 查看正在运行的容器 | ||||||||||||||||||||
docker ps -a | 查看所有的容器 | ||||||||||||||||||||
docker rename 容器名 新容器名 | 容器重命名 | ||||||||||||||||||||
docker run -d -p 6380:6379 --name redis-container redis:lastest | 后台运行redis标签为lastest的镜像, 容器命名为redis-container , 对外访问6380端口指向容器中的6379端口 (宿主机端口:容器端口)
| ||||||||||||||||||||
docker exec -it redis-container bash | 进入容器并进入到终端 ( 在正在运行的容器中运行命令 )
| ||||||||||||||||||||
docker start 容器名/容器id | 启动容器 | ||||||||||||||||||||
docker restart 容器名/容器id | 重启容器 | ||||||||||||||||||||
docker stop 容器名/容器id | 停止运行容器 | ||||||||||||||||||||
docker kill 容器名/容器id | 强制停止运行容器 | ||||||||||||||||||||
docker rm 容器名/容器id | 删除容器 | ||||||||||||||||||||
docker cp redis php8-1:/usr/src/php/ext | 容器和本地指尖复制文件/文件夹 把redis扩展文件夹复制到php8-1容器的/usr/src/php/ext文件夹中 | ||||||||||||||||||||
docker container inspect php8-1 | 查看php8-1容器的详细信息 |
dockerfile
命令 | 描述 |
---|---|
from | 指定基础镜像 |
run | 在命令前加run 即可运行命令 |
add/copy 宿主机文件地址.... 容器文件地址 | copy文件 1.add会自动解压文件(gzip ,tar,xz ....) , 支持url(会下载链接放到目标目录 , 权限自动为600 , 如果url是压缩包时不会自动解压,需要配合RUN命令使用) 2.copy只是拷贝 , 支持多文件拷贝、匹配文件 |
workdir 容器文件地址 | 设置当前工作目录 |
volume | 通docker run 中的-v参数 , 将设置的工作目录挂载到容器中 运行在容器产生的数据, 应该挂载在宿主机上(mysql ,redis..) volume /data |
expose | 指定容器对外的端口 |
cmd ["参数1","参数2"] | 指定容器启动后运行的命令 , 这里注意是双引号 |
entrypoint | 和CMD一样: 指定容器启动后运行的命令 当指定了ENTRYPOINT后, CMD指令就有了变化 , CMD的内容当做参数传给了ENTRYPOINT指令 构建后会执行curl -s http://ipinfo.io 如果变了,想运行curl -s http://ipinfo.io -I 错误: docker run 上面的镜像 -I , 这里会报错 正确: 重新构建Dockerfile 这里如果变了,想运行curl -s http://ipinfo.io -I 错误: docker run 上面的镜像 -I , 这里会在上面追加-I参数 , 正常运行, 把CMD内容当成参数传给ENTRYPOINT指令 |
ENV | 设置环境变量 env 变量名=变量值 区别: ENV无论在镜像构建时还是容器运行时都可以使用变量 ARG 只用于镜像构建时设置变量,容器运行时无法使用 |
ARG | |
USER | 改变环境 , 用于切换用户 USER root |
构建自定义镜像
1.创建一个Dockerfile文件
FROM nginx
RUN echo '<meta charset=utf8> 测试构建dockerfile' > /usr/share/nginx/html/index.html
ENV MYSQL_VERSION=5.6
RUN yum install mysql-{$MYSQL_VERSION} -y
2. 运行docker build . (可执行 docker build -t 镜像名 . , 这里直接就能对名字进行写入)
构建成功是下图这样子, 无名字 无tag的
3. 修改镜像名
docker tag 镜像id tag名
4. 运行查看
docker run -d -p 9555:80 my-build-nginx
CMD的坑
CMD systemctl start nginx 这是错误的 ,容器内的程序必须后台运行 , 当前是前台运行 , 会报错无法启动
这条命令是希望nginx以守护进程的形式启动,
会转化成 CMD ["sh","-c","systemctl start nginx"] , 执行完毕就结束了 , 容器退出
CMD ["nginx","-g","daemon off;"]