时间那么宝贵哪有一个小时学习一个新的技能!那么十分钟呢?本文记录工作中需要快速使用 docker
的几个场景,真正帮你十分钟入门!
场景一:了解何为Docker
如果你不太了解Docker,还是自己搜一下吧,本文基于你至少知道Docker干啥用的;Docker是通过标准的配置文件来创造统一的开发或者生产环境的一个工具,其核心就是镜像(已经配置好了各种环境)。
场景二:配置Docker国内镜像
没啥好说的,直接上方法
如果你是安装的Mac或者Windows客户端都可以按照图所示配置镜像地址
Linux下:
# vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn"]
}
# 然后根据你是Ubuntu还是Centos等其他系统,重启docker服务即可
场景三:快速查找、下载你需要的Docker环境
# 查找环境(后面的 `--no-trunc` 是为了完整输出描述信息) # 你也可以去 `https://hub.docker.com/` 网站搜索,搜索功能更强大 docker search mysql --no-trunc # 搜索某个镜像的tags(这个docker并未提供原生命令,解决方案都是利用docker提供的开放api进行搜索,或者去 `https://hub.docker.com/` 查阅 # 本命令来自 `https://stackoverflow.com/questions/28320134/how-can-i-list-all-tags-for-a-docker-image-on-a-remote-registry`) wget -q https://registry.hub.docker.com/v1/repositories/ubuntu/tags -O - | sed -e 's/[][]//g' -e 's/"//g' -e 's/ //g' | tr '}' '\n' | awk -F: '{print $3}' # 下载某个镜像 docker pull mysql # 下载某个特定 `tags`(通常是版本号)的镜像,强烈建议制定 `tags` 下载,尤其是生产环境 docker pull mysql:8.0 # 删除某个镜像 docker rmi mysql
场景四:基于某个镜像创建、运行并进入容器
# 查看所有容器 docker ps -a # -a 参数可以查看已停止运行的容器 # 基于某个镜像创建容器并运行 docker create -it --name='ubuntu-20' ubuntu # 参数 `-it` 标识了可以支持标准输入输出,通常一起使用 `--name` 为该容器起个名字,强烈建议一定起一个独立名字 docker start ubuntu-20 # 启动该容器 docker exec -it ubuntu-20 /bin/bash # 在该容器运行交互命令行工具,即可进入容器 # 快速创建并运行 # 这是一条整合命令,相当于上面的三条,特别注意,如果不添加 `-d` 参数,运行后直接进入到容器交互模式,如果此时exit退出,则容器会自动停止,`-d` 是保证后台运行 docker run -it -d --name='ubuntu-20' ubuntu /bin/bash # 容器操作是docker中最复杂的功能,需要多多学习研究
场景五:映射本地端口及文件目录
# Docker 最核心的功能就是代替宿主机运行我们的服务(尤其是微服务),所以要开放端口给外界能够访问,开发环境中还要开放目录方便代码及配置共享,调试发布镜像 # `-P` 自动映射所有开放的端口, 映射多个直接指定多个 `--expose` 参数即可 docker run -it -d -P --name=port-test --expose=8000 --expose=8001 ubuntu /bin/bash # `-p` 指定端口映射,通常我们都是使用-p指定端口,方便自动化运维 docker run -it -d -p 8000:8000 --name=port-test ubuntu /bin/bash # 查看容器映射的端口 docker port port-test # 8000/tcp -> 0.0.0.0:55002 # 8000/tcp -> :::55002 # 映射目录Docker提供了两个参数,分别是不同的方式,其中 `-v` 足够平时开发调试使用,如果是使用更加完善的文件管理,请使用 `--mount` 参数,这里只记录下 `-v` 的使用: docker run -it -d -v /path/to/source/test:/www --name=share-test ubuntu /bin/bash # 进入容器后,可发现 `/www` 可访问
场景六:固定Docker容器IP,更方便自动化
Docker安装后,会创建三种网络类型,在创建容器时可指定其中一种;
docker run时可通过--network
参数指定网卡类型$ docker network ls NETWORK ID NAME DRIVER SCOPE e6eaace1cd3e bridge bridge local #创建虚拟网卡进行通信 a6a9b06010ae host host local #与主机共享网卡,特别提醒:该模式仅支持Linux系统,Mac下指定该模式后容器内的IP与主机不一致,且主机无法访问容器内 547191ac0139 none null local #无网络链接
非特别场景(比如对网络要求超高)一般都会配置为bridge,该模式下默认重启容器则会从新分配IP,并且默认虚拟网卡下
--ip
参数是无效的,必须通过创建一个自定义虚拟网卡,达到固定IP的目的# 指定网卡网段,注意下面两条命令分别创建了B类和C类IP两个网段的网卡,具体了解可自行百度,实际使用可选用 `--subnet=172.18.0.0/16` B类网段,IP地址很多,足够用了 docker network create --subnet=172.18.0.0/16 mynetwork docker network create --subnet=192.168.22.0/24 mynetwork192 # 创建容器并指定IP docker run -itd --name net172 --net=mynetwork --ip=172.18.0.2 ubuntu /bin/bash
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。