1.安装docker可参照官方文档
docker的镜像源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
指定下载docker的源例如(CentOS 8.0):
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
指定下载镜像源例如:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":["https://docker.1ms.run",
"https://docker.1panel.live/",
"https://hub-mirror.c.163.com",
"https://mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.常用命令
详细参考:docker | Docker Docs
2.1 下载镜像 docker pull <镜像名:版本>
若不指定版本则下载最新版,例如docker pull nginx,则会下载最新版的nginx镜像
2.2 查看镜像列表及相关信息 docker images
2.3 删除镜像 docker rmi <镜像名:版本/image id>
若不指定版本则下载最新版,例如docker pull nginx,则会下载最新版的nginx镜像
2.4 启动新容器 docker run [options] <镜像名:版本>
options及其它参数作用:
<镜像名:版本> ,若不指定镜像版本则会启动最新版,若不存在镜像则会自动下载
-d ,使镜像在后台运行
--name <别名> ,赋予容器别名,若不设置则随机生成
-p <外部端口:内部端口> ,端口映射,遵循外部端口:内部端口,需注意外部端口是否重复,而每一个容器的内部端口是独立的,可以重复。简单来说,每启动一个容器就相当于启动了一台虚拟机,所以可重复。可使用多个-p做多个映射
-v <外部文件目录:内部文件目录>,目录挂载,内部文件目录可查询相应文档
--network <网络名称>,指定容器加入的网络
-e,配置环境变量(例5)
例1:docker run -d --name myapp -p 80:80 mynginx:v1.0 ->后台运行mynginx:v1.0镜像暴露在80端口上,并取别名为myapp
例2:docker run -d -p 80:80 --name myapp -v /app/nghtml:/usr/share/nginx/html nginx ->把外部的/app/nghtml目录挂载到/usr/share/nginx/html目录上。挂载后目录则会变成双向链接(内外部修改,文件都会发生变化)
例3:docker run -d -p 88:80 -v /app/nghtml:/usr/share/nginx/html -v /app/ngconf:/etc/nginx --name myapp02 nginx ->在例2基础上再挂载conf目录到外部(挂载会以外部文件为准,若外部文件为空,则会出现docker找不到配置文件的问题,所以需要提前配置好外部配置文件)
例4:docker run -d -p 98:80 -v /app/nghtml:/usr/share/nginx/html -v ngconf:/etc/nginx --name myapp03 nginx ->使用卷映射解决例3配置文件问题,映射后位置为/var/lib/docker/volumes/<volume-name>(你的卷名,为以上标绿字段)
例5:docker -run -d -p 6379::6379 -v /app/rd1:/bitnami/redis/data -e REDIS_REPLICATION_MODE=master -e REDIS_PASSWORD=your-password --name redis1 bitnami/redis
2.5 查看正在运行得容器 docker ps [options]
options及其它参数作用:
-a ,查看所有容器信息,包含未运行的容器
-q,只打印容器ID
例如:docker ps -aq 会打印所有存在的容器的id
2.6 停止运行容器 docker stop <容器ID/ContainerID>
可用doker ps命令查看容器id,容器id可用前三位,理论上只要能与其他容器进行区别即可
2.7 启动停止状态的容器 docker start <镜像名/容器ID>
2.8 重启容器 docker restart <容器ID>
可重启运行中的或停止的容器
2.9 查看容器状态(占用) docker stats <容器ID>
2.10 查看容器日志 docker logs <容器ID>
2.11 进入容器内部bash控制台 docker exec [options] <容器ID/容器名> bash
options及其它参数作用:
-it,以交互模式进入容器
在exec模式下,输入exit可退出
2.12 删除容器 docker rm [options] <容器ID>
options及其它参数作用:
-f ,强制删除运行中的容器
tips:
可使用docker rm -f $(docker ps -aq)删除所有容器
2.13 打包提交容器(打包成镜像) docker commit [options] <需打包的容器名> <镜像名>
options及其它参数作用:
-a <作者名>,指定镜像作者
-c <List>,使用dockerfile来创建镜像
-m <信息>,本次打包的相关信息
-p,打包时暂停容器运行
<需打包的容器名>,打包的目标容器
<镜像名>,打包后镜像的名字
2.14 封装已打包的容器 docker save [options] [打包后文件名.后缀] <需要打包的镜像名>
options及其它参数作用:
-o <文件名>,指定文件名称
例如:docker save -o myapp.tar myapp,注意这里的文件名需要小写!
2.15 加载打包的容器 docker load [options] <已打包的镜像文件名>
options及其它参数作用:
-i,指定文件名
2.16 卷操作 docker volume [command]
command及其作用:
ls,查看所有卷
create <卷名>,创建一个卷
inspect <卷名>,查看某个卷的详情
2.17 查看docker对象详细信息 docker inspect [options] <名称/ID>
options及其作用:
-type,返回指定类型的对象信息,可选类型(container、image、network、volume)
例如:docker network inspect ->查看docker网络详情
3.分享镜像
3.1 登录hub账号 docker login
3.2 给镜像添加标签 docker tag <原镜像名<:版本名>> <新标记名<:版本名>>
给镜像标记不同版本或者别名,便于归入特定仓库
例如:docker tag mynginx:v1.0 runseasy/mynginx:latest
3.2 推送至login账户 dockers push <镜像名:版本号>
最好为tag后的名称,便于管理
版本名可以为:latest,也就是指定他为最新版本,便于下载(无需指定版本号)
4.自定义网络
4.1 自定义网络相关 docker network <commands>
command及其作用:
ls,查看所有网络
create <name>,创建一个网络
容器加入同一网络后(参考2.4中--network参数),容器名=访问网络域名,
例如:docker exec -it app1 bash下,可以用curl http://app02:80访问到app02的数据,注意这里的端口是容器的内部端口
5.compose.yaml文件编写及应用
详细参考:docker compose | Docker Docs
5.1 compose.yaml编写规范及启动流程


5.2 docker compose <commands> [options] <service>
commands用法:
up,从<service>中构建(build)->创建(create)->启动(start)一个容器,从无到有创建
down ,停止并删除容器、网络,使用--rmi all -v可以连带删除卷
stop ,停止正在运行的服务
ls,查看正在运行的compose项目
options用法:
-f,指定文件名
-d,后台启动
tips:
执行同一个compose文件,docker会识别文件中被修改的内容选择性运行,不会全部重新运行
6.DockerFile
6.1 DockerFile里需要包含基础环境、软件包、启动命令三个内容
6.2 DockerFile指令
详细参考:Dockerfile reference | Docker Docs
