参照官网进行安装Docker Desktop
macOS下安装成功查看版本信息
#版本信息
docker version
#详细信息
docker info
#命令帮助
docker [command] --help
复制代码
#搜索镜像
docker search xxxx
#拉取镜像
docker pull mysql[:版本号]
#查看镜像:-a-->查看全部;-q-->只查看id
docker images [-a/-q]
#删除指定镜像
docker rmi -f 镜像id
#删除多个镜像
docker rmi -f 镜像id 镜像id
#删除全部镜像
docker rmi -f $(docker images -aq)
复制代码
docker run [] image
#参数说明
--name="Name"
-d #后台方式运行,如果使用后台运行,必须要有一个前台进程,如果没有的话容器会自动停止
-it #使用交互方式运行,进入容器查看内容
-p #指定容器的端口 -p 8080:8080
-p 主机端口:容器端口 #最常用
-p 容器端口
容器端口
-p ip:主机端口:容器端口
-P #随机指定端口
exit #从容器停止并退出
Ctrl + p + q #容器不停止退出
docker exec -it 容器id /bin/bash
复制代码
#查看容器
docker ps 命令
#没有接命令,表示当前运行的容器
-a #列出当前正在运行的,带出历时运行过的
-n=? #显示最近创建的容器,如 -n=1表示最近1个
-q #只显示容器的编号
#查看容器(镜像)详细信息
docker inspect [options] name|id
-f
-s
复制代码
#启动和停止容器
docker start 容器id #启动
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
#移除容器
docker rm 容器id #如果容器正在运行,无法移除容器
docker rm -f 容器id #强制移除容器
#日志
docker logs
#查看进程
docker top 容器id
复制代码
#进入容器后开启一个新的终端,可以在里面操作(常用)
docker exec -it 容器id
#进入容器正在执行的终端,不会启动新进程
docker attach 容器id
复制代码
#从容器中拷贝文件到主机
docker cp 容器id:路径 主机路径
复制代码
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件 所有应用直接打包docker就可以跑起来 pull远程仓库、朋友拷贝、自己制作
镜像是无法修改的,当运行一个镜像后,会产生一个容器,修改只在容器层上生效,当commit容器后会生成一个新的镜像,作为以后备用,以此类推,以后不断叠加,产生出新的镜像。就像虚拟机中的快照一样。
#将当前容器提交为镜像
docker commit -m="message" -a="author" 容器id 镜像名:[tag]
复制代码
容器数据卷:容器中数据的持久化和同步操作,容器间的数据也是可以共享的 docker run -it -v 主机目录:容器内目录 镜像 /bin/bash 复制代码 可以使用多个
-v
# -p 端口映射
# -v 卷挂载
# -e 环境配置
# --name 容器名
docker run -d -p 3310:3306 -v ~/home/mysql/conf:/etc/mysql/conf.d -v ~/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
复制代码
使用Navicat连接docker容器中数据库是发生错误
问题的发生原因:mysql8之前版本的加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 解决方案:①升级Navicat驱动;②将加密规则还原为mysql_native_password(下面采用这种方案) #进入容器 docker exec -it 容器id bash #登录mysql mysql --user=root --password #修改加密规则 alter user 'root' identified with mysql_native_password by '123456'; 复制代码
在Navicat中创建一个数据库后,查看主机挂载路径下已经生成了对应的文件
#匿名挂载 -v后直接跟容器路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#具名挂载 -v后加卷名:容器路径
docker run -d -P --name nginx01 -v hasNameNginx:/etc/nginx nginx
#查看卷的相关信息
docker volume command
create #创建一个卷
inspect #查看详情 (跟卷名)
ls #列出所有的卷
prune #移除不用的卷
rm #移除一个或多个卷
复制代码
所有docker容器内的卷,没有指定目录的情况下,都是在
/var/lib/docker/volumes/
路径下 通常我们使用的是具名挂载 (指定路径挂载前面 已经讲过,即-v
后面加宿主机路径:容器路径
)
还可以通过-v容器内路径:ro/rw来改变读写权限
# :ro表示这个路径只能通过宿主机来更改,容器内部是无法操作的
docker run -d -P --name nginx01 -v hasNameNginx:/etc/nginx:ro nginx
# :rw表示可读可写
docker run -d -P --name nginx01 -v hasNameNginx:/etc/nginx:rw nginx
复制代码
dockerfile是用来构建docker镜像的文件,本质就是一个命令参数脚本
dockerfile
文件docker build
构建成为一个镜像docker run
运行镜像docker push
发布镜像#
表示注释dockerfile是面向开发的,我们以后要发布项目,做镜像就需要编写dockerfile文件,这个文件十分简单
docker镜像逐渐成为企业交付的标准,必须掌握!
步骤:开发、部署、运维....
FROM #指定基础镜像
MAINTAINER #镜像是谁写的,一般是加上姓名和邮箱
RUN #docker镜像构建的时候需要运行的命令
ADD #往镜像中添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录位置
EXPOSE #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承dockerfile这个时候就会运行ONBUILD指令
COPY #类似add,将我们的文件拷贝到镜像中
ENV #构建的时候设置环境变量
复制代码
DockerHub中99%的镜像从scratch这个基础镜像开始构建,然后配置需要的软件和相关配置
创建一个自己的centos #构建镜像 docker build -f dockerfile文件路径 -t 镜像名:[tag] 复制代码
构建完毕后,我们创建的centos就可以使用vim或net相关的命令了
可以使用
docker history name|id
查看一个镜像的构建过程
对比
CMD
和ENTRYPOINT
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。