Docker
简介
- Docker
- Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- 网络模式 和 端口映射
学习
使用|命令
以镜像为核心,将镜像加载到容器运行
各种获取镜像的方式<–>镜像<–>容器
系统命令
systemctl status docker # 查看docker状态
systemctl start docker # 开启docker
ststemctl stop docker # 关闭docker
systemctl restart docker # 重启docker
vim /etc/docker/daemon.json # 修改文件
{
"resistry-mirrors":["<镜像网址>"]
}# 比如 https://cdoid6va.mirror.aliyuncs.com
systemctl daemon-reload docker # 重新载入daemon-reload文件
#最后需要重新启动
Docker命令
- 命令使用方式:在bash中使用
帮助命令
//查看帮助
docker --help # 查看帮助命令
docker <命令> --help # 查看该命令的帮助
docker --version # 查看简易版本星系
docker version # 查看版本信息
docker info # 查看系统信息
镜像命令
<镜像>:<镜像名[:<tag>]>,<镜像ID>
#查看所有镜像
docker images
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像id
docker search <镜像名>[:<版本号version>] //在远程镜像站查看指定的镜像,可以到Docker Hub上搜索,有更详细信息
--filter , -f Filter output based on conditions provided
--format Pretty-print search using a Go template
--limit 25 Max number of search results
--no-trunc
# --filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的
docker pull <镜像名>[:<TAG latest|5.7>] //从镜像站拉取镜像
docker pull <地址>
# 删除指定的镜像
docker rmi <镜像D>
-f # 强制删除
docker rmi <镜像> <镜像> # 删除多个镜像
docker rmi $(docker images -a) # 删除所有镜像
# 将容器生成镜像
docker commit <容器名> <目的镜像名>[:<tag>]
-a="<作者名>" # 作者
-m="<注释>"
# 镜像打包、发送、接收
docker save -o <打包目的目录> <镜像名> //压缩
scp <文件路径> <目的路径 可能包含IP地址> //发送
docker load -i <路径> //载入镜像
//容器打包
docker export -o <文件路径> <容器名>
docker import <文件路径> <容器名[:<版本>]>
# 再贴一个标签
docker tag <源镜像> <目的镜像名[:<tag>]>
# 远程登录仓库
docker login
-u <用户名>
docker logout
容器命令
常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
<image> :<镜像>
<container> :<容器名>
<containerID>:<容器ID>
#将镜像加载到容器
dockr run <image> <command进入容器后执行的命令:/bin/bash>
--name=<唯一的容器名>
-it # -t:分配终端;-i:交互式容器
-d # 后台运行容器
-v <宿主机目录>:<容器内目录>] # 目录 挂载|映射
-p <宿主机端口>:<容器端口>] # 端口映射
<ip>:<宿主机端口>:<容器端口>
<容器端口>
-P # 随机指定端口(大写P)
--rm #用完就删除
-e <key>=<value># 环境配置
--net <network>
# 进入容器
docker exec <container> <command进入容器后执行的命令:/bin/bash>
-it
-d
# 进入正在运行的命令行
docker attach <容器>
# 退出容器
exit #容器停止并退出
# Ctrl + P + Q #容器不停止退出
# 查看容器
docker ps # 查看 正在 运行的容器
-a # 查看 正在+历史 运行的容器
-l # 查看 最近 运行的容器
-q # 只显示容器的编号
# 有时-aq
#启动容器
docker start <容器>
#重启容器
docker restart <容器>
#停止当前正在运行的容器
docker stop <容器>
#强制停止当前容器
docker kill <容器>
# 查看容器的进程信息
docekr top <容器>
#查看容器的详细信息,-f==--format
docker inspect <容器>
-f='{{<.属性1.子属性1>}}'
#删除容器
docker rm <容器>
-f # 强制删除
docker rm <容器> <容器> # 删除多个容器名
docker rm $(docker ps -aq) # (查询出来的)删除所有容器,$( ) 可以用 ` ` 替换
Dockerfile
构建步骤:
1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包! 添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露端口配置,跟 -p 是一个道理
CMD # 指定这个容器启动时要执行的命令,只有最后一个命令会生效,可悲替代
ENTRYPOINT # 指定这个容器启动的时候要执行的命令,可以追加命令
ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行ONBUILD的指令。触发指令
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量,跟 -e 是一个意思
# CMD 和 ENTRYPOINT 的区别说明:(后面也会介绍)
# 若CMD 和 ENTRYPOINT 后跟的都是 ls -a 这个命令,当docker run 一个容器时,添加了 -l 选项,则CMD里的ls -a 命令就会被替换成-l;而ENTRYPOINT中的 ls -a会追加-l变成 ls -a -l
docker build .
-f <Dockerfile文件> #默认为当前文件下的Dockerfile
-t <镜像>
网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker network ls
docker network connect mynet tomcat01
docker network disconnect mynet tomcat01
docker network inspect <network>
docker inspect <network|容器名>
其他
# 查看日志
docker logs
-f #跟踪日志输出
-t #带时间戳
--tail # 要显示的条数
docker cp <源文件路径> <目的文件夹路径> //复制文件,宿主机根目录:/root;容器目录:<容器>:/root
所有命令(docker --help)
[root@localhost ~]# docker --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides
DOCKER_HOST env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default
"info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands:
app* Docker App (Docker Inc., v0.9.1-beta3)
builder Manage builds
buildx* Build with BuildKit (Docker Inc., v0.5.1-docker)
config Manage Docker configs
container Manage containers
context Manage contexts
image Manage images
manifest Manage Docker image manifests and manifest lists
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
scan* Docker Scan (Docker Inc.)
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Run 'docker COMMAND --help' for more information on a command.
To get more help with docker, check out our guides at https://docs.docker.com/go/guides/
安装
步骤(安装指导-简化版/2021.5.2)
#1.卸载历史版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2.查询历史版本
yum list docker-ce --showduplicates | sort -r //查看历史版本
#正式开始安装
#3.需要的安装包
yum install -y yum-utils
#4.设置镜像的仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #国外地址(上面的)比较慢,阿里云镜像(z这个)比较快
#更新索引
yum makecache fast
//yum-config-manager --enable docker-ce-nightly
//yum-config-manager --enable docker-ce-test
//yum-config-manager --disable docker-ce-nightly
#5.安装docker docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io //安装相关的内容,一直yes
#下历史版本,用下面这个
yum install docker-ce[-<VERSION_STRING>] docker-ce-cli[-<VERSION_STRING>] containerd.io //安装相关的内容,一直yes
#5.启动docker
systemctl start docker
#6.使用docker version 查看是否安装成功
docker version
阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ffcoitbk.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
可能出现的错误及处理
- 权限不足;需要管理员权限;切换到root|在每条指令前+’sudo ‘
- 报错:
Failed to start docker.service: Unit not found
;安装失败;重装,最后一条命令一直yes - 新建centos7的虚拟机安装docker后无法启动,报错:Failed to start docker.service: Unit not found