安装docker 官网 Home - Docker
windows安装 Windows Docker 安装 | 菜鸟教程 (runoob.com)
centos安装 CentOS Docker 安装 | 菜鸟教程 (runoob.com)
Install Docker Engine on CentOS | Docker Documentation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest docker-latest-logrotate \ docker-logrotate \ docker-engine sudo yum install -y yum-utils yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast yum -y install docker-ce docker-ce-cli containerd.io systemctl start docker docker version docker run hello-world systemctl stop docker yum remove docker-ce docker-ce-cli containerd.io rm -rf /var/lib/dockerrm -rf /var/lib/containerd
ubuntu安装 最详细的ubuntu安装docker教程 | xd’s blog (jinianyoushang.github.io)
设置镜像加速 centos/ubuntu 1 2 3 4 5 6 7 8 9 10 # 我自己的网址 https://******.mirror.aliyuncs.com sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://******.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
windows 针对安装了Docker Toolbox的用户,您可以参考以下配置步骤:
创建一台安装有Docker环境的Linux虚拟机,指定机器名称为default,同时配置Docker加速器地址。
1 docker-machine create --engine-registry-mirror=https://******.mirror.aliyuncs.com -d virtualbox default
查看机器的环境配置,并配置到本地,并通过Docker客户端访问Docker服务。
1 docker-machine env defaulteval "$(docker-machine env default)"docker info
针对安装了Docker for Windows的用户,您可以参考以下配置步骤:
在系统右下角托盘图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Docker Daemon。编辑窗口内的JSON串,填写下方加速器地址:
1 2 3 { "registry-mirrors": ["https://******.mirror.aliyuncs.com"] }
编辑完成后点击 Apply 保存按钮,等待Docker重启并应用配置的镜像加速器。
注意 Docker for Windows 和 Docker Toolbox互不兼容,如果同时安装两者的话,需要使用hyperv的参数启动。
1 docker-machine create --engine-registry-mirror=https://******.mirror.aliyuncs.com -d hyperv default
Docker for Windows 有两种运行模式,一种运行Windows相关容器,一种运行传统的Linux容器。同一时间只能选择一种模式运行。
WSL安装 1 2 3 4 5 6 7 8 9 10 11 #安装 wsl --install #关闭wsl wsl --shutdown #检查正在运行的 WSL 版本 wsl -l -v #将版本从 WSL 1 升级到 WSL 2 wsl --install #令可用于从 WSL 2 降级到 WSL 1,或将以前安装的 Linux 发行版从 WSL 1 更新到 WSL 2。 wsl --set-version
(一)Docker 常用命令 帮助启动类命令 1 2 3 4 5 6 7 8 9 • 启动 docker: systemctl start docker • 停止 docker: systemctl stop docker • 重启 docker: systemctl restart docker • 查看 docker 状态: systemctl status docker • 开机启动: systemctl enable docker • 查看 docker 概要信息: docker info • 查看 docker 总体帮助文档: docker --help • 查看 docker 命令帮助文档: docker 具体命令 --help docker stats #查看容器状态
镜像命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # 列出本地主机上的镜像 docker images OPTIONS 说明: • -a :列出本地所有的镜像(含历史映像层) • -q :只显示镜像 ID。 # 搜索镜像 docker search hello-world docker search hello-world --limit 5 #限制显示数量 # 拉取镜像 docker pull hello-world docker pull redis:6.0.8 #可以指定版本号 # 运行 docker run hello-world # 查看镜像/容器/数据卷所占的空间 docker system df # 镜像传输 # 将镜像保存成压缩包 docker save -o abc.tar guignginx:v1.0 # 别的机器加载这个镜像 docker load -i abc.tar # 删除某个镜像 docker rmi 某个 XXX 镜像名字 ID # 强制删除 docker rmi -f 镜像 ID # 删除多个 docker rmi -f 镜像名 1:TAG 镜像名 2:TAG # 删除全部 docker rmi -f $(docker images -qa)
容器命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 # 新建+启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] # OPTIONS 说明 --name="容器新名字" 为容器指定一个名称; -d: 后台运行容器并返回容器 ID,也即启动守护式容器(后台运行); -i:以交互模式运行容器,通常与 -t 同时使用; -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;也即启动交互式容器(前台有伪终端,等待交互); -P: 随机端口映射,大写 P -p: 指定端口映射,小写 p 本机端口:容器端口 --restart=always #表示docker重启之后,此容器也随之重启,可持续监控 # 使用镜像 centos:latest 以交互模式启动一个容器,在容器内执行/bin/bash 命令。 docker run -it ubuntu /bin/bash # 列出当前所有正在运行的容器 docker ps [OPTIONS] # OPTIONS 说明 -a :列出当前所有正在运行的容器+历史上运行过的 -l :显示最近创建的容器。 -n:显示最近 n 个创建的容器。 -q :静默模式,只显示容器编号。 # 退出容器 两种退出方式 • exit #run 进去容器,exit 退出,容器停止 • ctrl+p+q # run 进去容器,ctrl+p+q 退出,容器不停止 # 启动已停止运行的容器 docker start 容器 ID 或者容器名 # 重启容器 docker restart 容器 ID 或者容器名 # 停止容器 docker stop 容器 ID 或者容器名 # 强制停止容器 docker kill 容器 ID 或容器名 # 查看停止的容器 docker ps -a #列出当前所有正在运行的容器+历史上运行过的 docker ps -l #显示最近创建的容器。 # 删除已停止的容器 docker rm 容器 ID # 查看所有容器内ip docker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q) # 停止所有容器命令: sudo docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2) # 启动所有容器命令: sudo docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) # 一次性删除多个容器实例 危险!! docker rm -f $(docker ps -a -q) docker ps -a -q | xargs docker rm # 查看容器日志 docker logs 容器 ID # 查看容器内运行的进程 docker top 容器 ID # 查看容器内部细节 docker inspect 容器 ID # 进入正在运行的容器并以命令行交互 不会停止进程!!! docker exec -it 容器ID bash # 重新进入 会停止进程 尽量使用exec docker attach 容器ID # 从容器内拷贝文件到主机上 docker cp 容器 ID:容器内路径 目的主机路径 # 从主机上拷贝文件到容器内 docker cp 本地文件路径 ID全称:容器路径 # 导入和导出容器 export 导出容器的内容留作为一个 tar 归档文件[对应 import 命令] import 从 tar 包中的内容创建一个新的文件系统再导入为镜像[对应 export] # 案例 docker export 容器ID > 文件名.tar cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号 # 忘了添加参数 --restart=always ,可以在后面增加 docker container update --restart=always 容器名字
例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 使用镜像 centos:latest 以交互模式启动一个容器,在容器内执行/bin/bash 命令。 docker run -it ubuntu /bin/bash # 使用镜像 centos:latest 以后台模式启动一个容器 # 然后 docker ps -a 进行查看, 会发现容器已经退出 docker run -d centos #这个会自动退出 # 后台守护式启动 redis docker run -d redis docker run -d -p 6379:6379 --name docker-redis redis # 启动ubuntu,交互模式+后台守护 并端口映射 本地8001:容器内部80 随docker启动而启动 并进入命令行 docker run --name ubuntu_lingsheng -itd -p 8002:80 --restart=always ubuntu /bin/bash # 进入正在运行的容器并以命令行交互 不会停止进程!!! docker exec -it a054da0aef6f bash # 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。 docker run --name nginx-test -p 8080:80 -d nginx
(二)Docker 制作镜像commit 操作案例 1 2 # docker commit 提交容器副本使之成为一个新的镜像 docker commit -m="提交的描述信息" -a="作者" 容器 ID 要创建的目标镜像名:[标签名]
1 2 3 4 5 6 7 8 9 10 11 # 运行ubuntu docker run -it ubuntu # docker 容器内执行上述两条命令: 安装vim apt-get update apt-get -y install vim # 创建镜像 类似于继承扩展 # -m 信息 -a 作者 id 64ab1e160dda docker commit -m "add vim cmd" -a "xd" 64ab1e160dda myubuntu:1.0 docker commit -m "add ifconfig cmd" -a "xd" 16a5aea2318b myubuntu:1.1
(三)推送镜像到阿里云 1. 登录阿里云Docker Registry 1 $ docker login --username=纪念忧伤1 registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
2. 从Registry中拉取镜像 1 $ docker pull registry.cn-hangzhou.aliyuncs.com/ubuntu111/myubuntu:[镜像版本号]
3. 将镜像推送到Registry 1 2 3 $ docker login --username=纪念忧伤1 registry.cn-hangzhou.aliyuncs.com $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ubuntu111/myubuntu:[镜像版本号] $ docker push registry.cn-hangzhou.aliyuncs.com/ubuntu111/myubuntu:[镜像版本号]
1 2 3 f98c36a1fefe docker tag f98c36a1fefe registry.cn-hangzhou.aliyuncs.com/ubuntu111/myubuntu:1.0 docker push registry.cn-hangzhou.aliyuncs.com/ubuntu111/myubuntu:1.0
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
4. 选择合适的镜像仓库地址 从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。
5. 示例 使用”docker tag”命令重命名镜像,并将它通过专有网络地址推送至Registry。
1 2 $ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEregistry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB $ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 “docker push” 命令将该镜像推送至远程。
1 $ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
(四)本地镜像库 运行私有库 Registry,相当于本地有个私有 Docker hub 1 2 $ docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry # cf29cd04d793
更新Ubuntu 1 2 3 4 docker run -it ubuntu # 安装ifconfig apt-get update apt-get install net-tools
制作镜像 1 docker commit -m "add ifconfig cmd" -a "xd" 16a5aea2318b myubuntu:1.1
curl 验证私服库上有什么镜像 1 curl -XGET http://192.168.113.132:5000/v2/_catalog
将新镜像 zzyyubuntu:1.2 修改符合私服规范的 Tag 1 docker tag myubuntu:1.1 192.168.113.132:5000/myubuntu:1.1
修改配置文件使之支持 http 1 2 3 4 5 6 vim /etc/docker/daemon.json { "registry-mirrors": ["https://***.mirror.aliyuncs.com"], "insecure-registries": ["192.168.113.132:5000"] }
修改完后如果不生效,建议重启 docker,然后重新运行仓库
push 推送到私服库 1 docker push 192.168.113.132:5000/myubuntu:1.1
pull 到本地并运行 1 docker pull 192.168.113.132:5000/myubuntu:1.1
(五) Docker 容器数据卷 卷就是目录或文件,存在于一个或多个容器中,由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System 提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此 Docker 不会在容器删除时删除其挂载的数据卷
运行一个带有容器卷存储功能的容器实例 -v 1 2 3 4 5 6 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名 # 添加读写规则 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名 # 容器实例内部被限制,只能读取不能写 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
文件夹两边是双向同步的 ,可以多个文件夹同步
容器停止后,重启也会同步
容器 2 继承容器 1 的卷规则 —volumes-from 1 docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
坑:容器卷记得加入 Docker 挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个—privileged=true 参数即可
(六) docker常规软件安装 docker run之后要docker ps看看有没有启动
tomcat 1 2 3 4 5 6 7 8 9 10 11 12 13 #tomcat docker pull tomcat docker run -it -p 8080:8080 tomcat docker run -d -p 8080:8080 tomcat #之后进入tomcat 将webapps.dist 改成webapps docker exec -it 7a7673026676 bash rm webapps -r mv webapps.dist/ webapps #免修改版说明 docker pull billygoo/tomcat8-jdk8 docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
mysql 1 2 3 4 5 6 7 8 9 10 11 12 13 docker pull mysql # 简单版 没有用 docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql docker exec -it 容器 ID /bin/bash mysql -uroot -p # 实战版启动 docker run -d -p 3306:3306 --privileged=true \ -v /zzyyuse/mysql/log:/var/log/mysql \ -v /zzyyuse/mysql/data:/var/lib/mysql \ -v /zzyyuse/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 \ --name mysql5.7 mysql:5.7
默认字符集为latin1 解决中文乱码
SHOW VARIABLES LIKE ‘character%’
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 新建 my.cnf [client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8 # 通过容器卷同步给 mysql 容器实例 cd /zzyyuse/mysql/conf/ ls # 修改为上面的 vim my.cnf # 重新启动 mysql 容器实例再重新进入并查看字符编码 docker restart mysql
docker 安装完 MySQL 并 run 出容器后,建议请先修改完字符集编码后再新建 mysql 库-表-插数据
redis 1 2 # 入门版 不常用 docker run -d -p 6379:6379 redis
实战版启动 建目录 mkdir -p /app/redis
将一个 redis.conf 文件模板拷贝进/app/redis 目录下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #/app/redis 目录下修改 redis.conf 文件 3.1 开启 redis 验证 可选 requirepass 123 3.2 允许 redis 外地连接 必须 注释掉 # bind 127.0.0.1 3.3daemonize no 必须 将 daemonize yes 注释起来或者 daemonize no 设置,因为该配置和 docker run 中-d 参数冲突,会导致容器一直启动失败 3.4开启 redis 数据持久化 appendonly yes 可选 3.5关闭保护模式 protected-mode no
使用 redis6.0.8 镜像创建容器(也叫运行镜像) 1 docker run -p 6379:6379 --name myr3 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis redis-server /etc/redis/redis.conf
win
1 docker run -p 6379:6379 --name myredis1 --privileged=true -v D:/mydocker/redis/redis.conf:/etc/redis/redis.conf -v D:/mydocker/redis/data:/data -d redis redis-server /etc/redis/redis.conf
参考 Docker 教程 | 菜鸟教程 (runoob.com)