docker容器基础
1.docker是什么
docker是一个用于构建、运行和管理容器的软件框架
利用docker可以快速传送、测试和部署代码
什么是容器?
容器可以看作一个盒子,把软件和软件依赖的各项服务,统一打包进容器中,
任何人都可以开箱即用
开发:不用考虑跨平台的细节问题
测试:不用纠结测试环境和开发环境是否一致
运维:不用关心各种语言细节
2.搭建docker环境
推荐使用Ubuntu进行安装
2.1 虚拟机
执行一个命令:
curl -fsSL https://get.docker.com -o get-docker.sh &sudo sh get-docker.sh
2.2 云服务
腾讯云提供ubuntu+docker镜像
云服务提供:
- 7*24在线服务器
- 自动使用腾讯的docker加速
2.3 云服务器上使用docker
1.进入管理界面
2.点击容器管理、新建容器
3.输入信息
- 容器名称(自定义)
- 容器镜像(mysql)
- 镜像版本(5.7)
- 端口映射(3306-3306)
- 环境变量(MYSQL_ROOT_PASSWORD: xxxxxx)
注意:添加规则后 才能链接上mysql
3.docker技术体系
docker本质上是一个C/S软件,docker发送指令,dockerhost接收和执行指令:
- 管理镜像
- 管理容器
- 管理系统资源
仓库:存放镜像
镜像:启动容器
容器:运行软件
另外一个工具:k8s
k8s是Kubernetes缩写,一般运行在生产环境,用来管理容器和容器运行过程中需要的资源
- 服务发现和负载均衡
- 存储编排
- 自动发布和回滚
- 自动启动、替换、关闭容器
- 密钥和配置管理
k8s是一个非常专业,复杂的容器编排工具
4.docker常用命令
docker --help :列出所有的docker命令及其参数
4.0 免去sudo
sudo groupadd docker #创建新用户组 sudo usermod -aG docker $USER #当前用户加入用户组 newgrp docker #刷新用户组权限
4.1 镜像
关于镜像的操作,放在image子命令下面
$ docker image --help Usage: docker image COMMAND Manage images Commands: build 根据Dockerfile构建镜像 history 查看镜像的构建步骤 import 把一个容器的文件系统,导入为镜像 inspect 查看镜像信息 load 导入镜像 ls 查看镜像 prune 删除未使用的镜像 pull 从仓库拉取镜像 push 把镜像推送到仓库 rm 删除镜像 save 导出镜像 tag 给镜像打tag, Run 'docker image COMMAND --help' for more information on a command.
docker export:把容器的文件系统导入
举个例子:
增删查改
docker image pull mysql:5.7 #从仓库中拉取镜像 docker image ls #查看本地所有的镜像 docker image tag mysql:5.7 mysql:v5.7 #为镜像设置名字和tag docker image rm mysql:v5.7 #删除镜像 docker image rm 7e6c #删除镜像 通过image id删除
删除失败:
- image is referenced in multiple repositories 有多个id一样的镜像
- image is being used 镜像正在使用
不常用的命令:
docker image save mysql:5.7 -o mysql.img #导出镜像 docker image load -i mysql.img #导入镜像
4.2 网络
默认情况下,容器之间是不联网
如果容器之间要通信,需要使用同一个网络
ubuntu@VM-24-5-ubuntu:~$ docker network --help Usage: docker network COMMAND Manage networks Commands: connect 让容器加入指定的网络 create 创建网络 disconnect 让容器退出指定的网络 inspect 查看指定网络 ls 列出所有网络 prune 移除未使用的网络 rm 移除指定的网络 Run 'docker network COMMAND --help' for more information on a command.
举例子
docker network create lgs_nat #创建网络 docker network ls #查看所有网络 docker network rm 8abc #删除指定的网络
4.3 容器
docker的命令中,容器子命令是重中之重
ubuntu@VM-24-5-ubuntu:~$ docker conrainer --help Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Common Commands: run 创建并运行容器(重中之重) exec 进入运行中的容器里,执行命令 ps List containers build Build an image from a Dockerfile pull Download an image from a registry push Upload an image to a registry images List images login Log in to a registry logout Log out from a registry search Search Docker Hub for images version Show the Docker version information info Display system-wide information Management Commands: builder Manage builds buildx* Docker Buildx (Docker Inc., v0.11.2) compose* Docker Compose (Docker Inc., v2.21.0) container Manage containers context Manage contexts image Manage images manifest Manage Docker image manifests and manifest lists network Manage networks plugin Manage plugins system Manage Docker trust Manage trust on Docker images volume Manage volumes Swarm Commands: swarm Manage Swarm Commands: attach 将本地的输入输出,附加到容器中 commit 根据容器及其修改,创建新的镜像 cp 容器和服务器之间,文件传输 create 创建新的容器(不运行) diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server export 把容器的文件系统,到处 history Show the history of an image import Import the contents from a tarball to create a filesystem image inspect 查看容器信息 kill 强行停止运行中的容器 load Load an image from a tar archive or STDIN logs 显示容器的执行日志 pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container rename Rename a container restart 重启容器 rm 删除容器 rmi Remove one or more images save Save one or more images to a tar archive (streamed to STDOUT by default) start 启动容器 stats 查看容器状态 stop 停止容器 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 wait Block until one or more containers stop, then print their exit codes Global Options: --config string Location of client config files (default "/home/ubuntu/.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 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 "/home/ubuntu/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/home/ubuntu/.docker/cert.pem") --tlskey string Path to TLS key file (default "/home/ubuntu/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Run 'docker COMMAND --help' for more information on a command. For more help on how to use Docker, head to https://docs.docker.com/go/guides/
创建容器:create
启动容器:start
停止容器:stop
重启容器:restart
删除容器:rm
restart = stop + start
run = create + start
以手动启动mysql为例,演示docker run的用法
ubuntu@VM-24-5-ubuntu:~$ docker container run --name lgs_mysql_8.0 7e6d
ubuntu@VM-24-5-ubuntu:~$ docker container run --name mysql_8.0 -e MYSQL_ROOT_PASSWORD=12345678 7e6d
ubuntu@VM-24-5-ubuntu:~$ docker container run --name mysql_8.0 -e MYSQL_ROOT_PASSWORD=12345678 -p 3306:3306 7e6d
ubuntu@VM-24-5-ubuntu:~$ docker container run --name mysql_8.0 -e MYSQL_ROOT_PASSWORD=12345678 -p 3306:3306 -d 7e6d
ubuntu@VM-24-5-ubuntu:~$ docker container run \
--name mysql_8.0 \
-e MYSQL_ROOT_PASSWORD=12345678 -p 3307:3306 \
-d \
--volume /home/ubuntu/data:/var/lib/mysql \
--volume /home/ubntu/conf:/etc/mysql/conf.d \
7e6d
--name:指定容器名字,方便后续管理
-d:守护模式,后台运行容器
-p:端口映射,-p 服务器端口:容器端口
-e:设定环境变量
--volume:文件映射,用来持久化保存数据数据
进入容器执行命令:
docker container exec mysql_8.0 ls /var/lib/mysql