This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
docker [2019/06/17 14:21] jimmy [方法二:Dockerfile中增加`ENV LANG=C.UTF-8`] |
docker [2023/09/19 19:29] (current) xujianglong [Docker CE for CentOS (通过yum安装)] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | # Docker简介 | + | ====== |
- | ## 新服务器安装Docker及容器 | + | ===== 新服务器安装Docker及容器 |
- | * 安装Docker | + | |
- | * Docker配置 | + | * Docker配置 |
- | * 创建Dockerfile | + | * 创建Dockerfile |
- | * 通过Dockerfile生成镜像 | + | * 通过Dockerfile生成镜像 |
- | * 基于镜像生成容器 | + | * 基于镜像生成容器 |
- | # Docker安装 | + | ====== |
- | ## Docker for Windows | + | ===== Docker for Windows |
- | * Windows版本要求:Win10, | + | |
- | * 需要打开Hyper-V | + | * 需要打开Hyper-V |
- | * 下载Docker for Windows然后打开下载的文件按照提示安装即可 | + | * 下载Docker for Windows然后打开下载的文件按照提示安装即可 |
- | ## Docker CE for Ubuntu | + | ===== Docker CE for Ubuntu |
- | 参考[Docker CE for Ubuntu官方文档](https:// | + | 参考[[https:// |
- | * Ubuntu版本:64位,14.04/ | + | |
- | * 设置Ubuntu源 | + | * 设置Ubuntu源 |
- | ```bash | + | < |
sudo apt-get update | sudo apt-get update | ||
sudo apt-get install apt-transport-https ca-certificates curl \ | sudo apt-get install apt-transport-https ca-certificates curl \ | ||
- | software-properties-common | + | |
curl -fsSL https:// | curl -fsSL https:// | ||
sudo add-apt-repository \ | sudo add-apt-repository \ | ||
- | "deb [arch=amd64] https:// | + | |
- | $(lsb_release -cs) \ | + | $(lsb_release -cs) \ |
- | stable" | + | stable" |
- | ``` | + | </ |
+ | * 安装DockerCE | ||
- | * 安装DockerCE | + | < |
- | + | ||
- | ```bash | + | |
sudo apt-get update | sudo apt-get update | ||
sudo apt-get install docker-ce | sudo apt-get install docker-ce | ||
- | ``` | + | </ |
+ | * 验证安装是否成功 | ||
- | * 验证安装是否成功 | + | < |
- | + | ||
- | ```bash | + | |
sudo docker run hello-world | sudo docker run hello-world | ||
- | ``` | + | </ |
+ | ===== Docker CE for CentOS (通过yum安装) ===== | ||
- | ## Docker CE for CentOS | + | 参考[[https:// |
- | 参考[Docker CE for CentOS官方安装文档](https:// | + | * 安装需要的其他程序 |
+ | < | ||
- | * 安装需要的其他程序 | ||
- | |||
- | ``` | ||
sudo yum install -y yum-utils \ | sudo yum install -y yum-utils \ | ||
device-mapper-persistent-data \ | device-mapper-persistent-data \ | ||
lvm2 | lvm2 | ||
- | ``` | ||
- | * 配置Docker到yum库 | + | </ |
- | ``` | + | * 配置Docker到yum库 |
+ | |||
+ | < | ||
sudo yum-config-manager \ | sudo yum-config-manager \ | ||
--add-repo \ | --add-repo \ | ||
https:// | https:// | ||
- | ``` | ||
- | * 安装Docker | + | </ |
- | ``` | + | * 安装Docker |
+ | |||
+ | < | ||
sudo yum install docker-ce | sudo yum install docker-ce | ||
- | ``` | ||
- | * 启动Docker | + | </ |
+ | |||
+ | | ||
- | ``` | + | < |
sudo systemctl start docker | sudo systemctl start docker | ||
- | ``` | ||
- | ## Docker Toolbox | + | </ |
- | ## Docker for ArchLinux | + | ===== Docker |
- | ```bash | + | 参照:[[https:// |
+ | |||
+ | ==== 下载安装包 ==== | ||
+ | |||
+ | |||
+ | ===== Docker Toolbox ===== | ||
+ | |||
+ | ===== Docker for ArchLinux ===== | ||
+ | |||
+ | < | ||
# Arch源自带docker安装包,所以直接使用pacman就可以安装 | # Arch源自带docker安装包,所以直接使用pacman就可以安装 | ||
sudo pacman -Sy docker | sudo pacman -Sy docker | ||
- | ``` | + | </ |
+ | ====== Docker配置 ====== | ||
- | # Docker配置 | + | ===== Docker国内镜像加速 ===== |
- | ## Docker国内镜像加速 | + | 参考[[https:// |
- | 参考[Docker中国镜像加速](https: | + | 在'' |
- | 在`/ | + | < |
- | + | ||
- | ```json | + | |
{ | { | ||
" | " | ||
} | } | ||
- | ``` | + | </ |
+ | 如果是阿里云服务器,建议使用阿里云镜像加速,具体见https: | ||
- | 如果是阿里云服务器,建议使用阿里云镜像加速,具体见https:// | + | ===== Docker for Linux安装后配置 ===== |
- | ## Docker for Linux安装后配置 | + | ==== 非root用户使用Docker |
- | + | ||
- | ### 非root用户使用Docker | + | |
如果将当前用户添加到docker用户组: | 如果将当前用户添加到docker用户组: | ||
- | ``` | + | < |
sudo usermod -aG docker $USER | sudo usermod -aG docker $USER | ||
- | ``` | + | </ |
如果将其他用户添加到docker用户组: | 如果将其他用户添加到docker用户组: | ||
- | ``` | + | < |
sudo usermod -aG docker < | sudo usermod -aG docker < | ||
- | ``` | + | </ |
+ | ====== Docker常用操作 ====== | ||
- | # Docker常用操作 | + | ===== Docker操作流程 ===== |
- | ## Docker操作流程 | + | * 获取镜像:可以通过'' |
+ | * 生成容器:'' | ||
+ | * 发布镜像:'' | ||
- | * 获取镜像:可以通过`docker pull < | + | ===== Docker镜像操作 ===== |
- | * 生成容器:`docker run --name < | + | |
- | * 发布镜像:`docker commit [-m < | + | |
- | ## Docker镜像操作 | + | * 查看镜像:'' |
+ | * 删除镜像:'' | ||
+ | * 导出镜像:'' | ||
+ | * 导入镜像:'' | ||
- | * 查看镜像:`docker images`, `docker images -as` | + | ===== Docker容器操作 ===== |
- | * 删除镜像:`docker rmi < | + | |
- | * 导出镜像:`docker save -o < | + | |
- | * 导入镜像:`docker load -i < | + | |
- | ## Docker容器操作 | + | * 查看容器:'' |
+ | * 停用容器:'' | ||
+ | * 启动容器:'' | ||
+ | * 删除容器:'' | ||
- | * 查看容器:`docker container`或`docker ps`,`docker ps -a`(查看所有容器,包括已经停止的容器), | + | ===== Docker复制操作 ===== |
- | * 停用容器:`docker stop < | + | |
- | * 启动容器:`docker start < | + | |
- | * 删除容器:`docker rm < | + | |
- | ## Docker复制操作 | + | * 系统复制到容器:'' |
+ | * 容器复制到系统:'' | ||
+ | * 容器之间不能相互copy | ||
- | * 系统复制到容器:`docker cp < | + | ====== |
- | * 容器复制到系统:`docker cp < | + | |
- | * 容器之间不能相互copy | + | |
- | + | ||
- | # Dockerfile | + | |
Java Web示例: | Java Web示例: | ||
- | ```bash | + | < |
# 基于Uuntu16.04 | # 基于Uuntu16.04 | ||
FROM ubuntu: | FROM ubuntu: | ||
Line 211: | Line 215: | ||
CMD ~/start.sh && /bin/bash | CMD ~/start.sh && /bin/bash | ||
- | ``` | + | </ |
Django示例 | Django示例 | ||
- | ```bash | + | |
+ | < | ||
# 基于Uuntu16.04 | # 基于Uuntu16.04 | ||
FROM ubuntu: | FROM ubuntu: | ||
Line 263: | Line 267: | ||
CMD ~/start.sh && /bin/bash | CMD ~/start.sh && /bin/bash | ||
- | ``` | + | </ |
+ | ====== 常见问题解决 ====== | ||
- | # 常见问题解决 | + | ===== 修改已有容器的端口映射 ===== |
- | ## 修改已有容器的端口映射 | + | ==== 方法一:提交容器为新的镜像,删除原容器后重新创建一个容器,创建时修改端口映射 |
+ | ==== 方法二:直接修改容器的配置文件(Docker version 17.09.0-ce, build afdb6d4测试通过) ==== | ||
+ | 参考[[https:// | ||
- | ### 方法一:提交容器为新的镜像,删除原容器后重新创建一个容器,创建时修改端口映射 | + | * 使用docker inspect命令查看容器的id |
+ | * **停掉docker服务(这一步非常重要,不能省略)** | ||
- | ### 方法二:直接修改容器的配置文件(Docker version 17.09.0-ce, build afdb6d4测试通过) | + | < |
+ | sudo service docker stop | ||
+ | </ | ||
+ | * 修改config.v2.json文件(如果修改已有端口映射可以跳过此步骤) | ||
- | 参考[Docker Change Port Mapping for an Existing Container](https: | + | < |
+ | sudo vim /var/lib/docker/containers/<container | ||
+ | # 在ExposedPorts中添加类似" | ||
+ | </ | ||
+ | * 修改hostconfig.json文件 | ||
- | * 使用docker | + | < |
+ | sudo vim /var/lib/docker/ | ||
+ | # 添加或修改PortBindings,类似 " | ||
+ | </ | ||
+ | * 重新启动docker服务 | ||
- | * **停掉docker服务(这一步非常重要,不能省略)** | + | < |
+ | sudo service docker start | ||
+ | </ | ||
+ | | ||
- | ``` | + | < |
- | sudo service | + | sudo docker |
- | ``` | + | </ |
+ | * 启动docker容器内应该启动的程序或者服务(如果需要手动启动的情况下) | ||
- | * 修改config.v2.json文件(如果修改已有端口映射可以跳过此步骤) | + | ===== 自动启动容器内的service ===== |
- | ``` | + | * Dockerfile方式: |
- | sudo vim / | + | |
- | # 在ExposedPorts中添加类似" | + | |
- | ``` | + | |
- | * 修改hostconfig.json文件 | + | 在dockerfile中通过加入'' |
- | ``` | + | * Image方式: |
- | sudo vim / | + | |
- | # 添加或修改PortBindings,类似 " | + | |
- | ``` | + | |
- | * 重新启动docker服务 | + | 在run image的时候加入需要启动时执行的命令或者脚本即可,如果container已经存在则提交后再run,类似'' |
- | ``` | + | ===== Tomcat在容器内通过service方式启动提示Failed ===== |
- | sudo service | + | |
- | ``` | + | |
- | * 启动docker容器 | + | 在执行'' |
- | ``` | + | ===== 修改Docker镜像和容器文件路径 ===== |
- | sudo docker start < | + | |
- | ``` | + | |
- | * 启动docker容器内应该启动的程序或者服务(如果需要手动启动的情况下) | + | 参考链接:[[https:// |
- | ## 自动启动容器内的service | + | Docker for Linux的镜像和容器文件默认存储在/ |
- | * Dockerfile方式: | + | |
+ | * 备份原文件夹:''< | ||
+ | * 移动/ | ||
+ | * 修改docker daemon配置,即修改/ | ||
+ | * 启用Docker:''< | ||
+ | * 启动容器:''< | ||
- | 在dockerfile中通过加入`CMD service < | ||
- | * Image方式: | + | ===== 容器内中文字符无法显示 ===== |
- | 在run image的时候加入需要启动时执行的命令或者脚本即可,如果container已经存在则提交后再run,类似`docker run --name=test -dit ubuntu service < | + | 临时解决方案: |
- | ## Tomcat在容器内通过service方式启动提示Failed | + | * 查看是否支持中文:容器内执行'' |
+ | * 如果支持中文,则打开''/ | ||
+ | * 保存修改后的文件,并执行'' | ||
- | 在执行`docker run`命令时,增加参数`--cap-add SYS_PTRACE` | + | 永久解决方案: |
- | ## 修改Docker镜像和容器文件路径 | ||
- | 参考链接:[How to change the docker | + | ==== 方法一:docker |
- | Docker for Linux的镜像和容器文件默认存储在/var/lib/docker文件夹中,可以改为其他路径,修改步骤为 | + | ==== 方法二:Dockerfile中增加ENV LANG=C.UTF-8 ==== |
+ | |||
+ | ===== Redhat EL 6.8 docker 安装问题 ===== | ||
+ | |||
+ | 按照网上常见的办法去安装docker-io,一直失败,无奈只能采用离线安装的方式进行解决,主要的解决办法如下: - 下载离线需要的[[http: | ||
+ | |||
+ | ===== 容器内vim中文乱码 ===== | ||
- | * 停用Docker:`service docker stop` | + | 在~/.vimrc中添加如下内容(参考[[https: |
- | * 备份原文件夹:`tar czf ~/docker.tar.gz | + | |
- | * 移动/var/lib/docker文件夹到其他路径(**一定要使用mv命令,而不能cp再删除原文件夹**,否则会出现容器内service start失败):`mv / | + | |
- | * 修改docker daemon配置,即修改/ | + | |
- | * 启用Docker:`service docker start` | + | |
- | * 启动容器:`docker start < | + | |
- | ## 容器内中文字符无法显示 | + | < |
+ | :set encoding=utf-8 | ||
+ | :set fileencodings=ucs-bom, | ||
+ | :set fileencoding=gb2312 | ||
+ | :set termencoding=utf-8 | ||
+ | </ | ||
+ | ===== 容器内git log中文乱码 ===== | ||
- | ### 方法一:`docker run`时增加`-e LANG=C.UTF-8` | + | 参考:[[https:// |
- | ### 方法二:Dockerfile中增加`ENV LANG=C.UTF-8` | + | <code bash> |
+ | git config --global i18n.commitencoding utf-8 | ||
+ | git config --global i18n.logoutputencoding utf-8 | ||
+ | </ | ||
+ | 执行上述命令后,在~/ | ||
- | ## Redhat EL 6.8 docker 安装问题 | ||