User Tools

Site Tools


docker

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
docker [2019/06/17 14:21]
jimmy [Redhat EL 6.8 docker 安装]
docker [2023/09/19 19:29] (current)
xujianglong [Docker CE for CentOS (通过yum安装)]
Line 1: Line 1:
-Docker简介+====== Docker简介 ======
  
-## 新服务器安装Docker及容器+===== 新服务器安装Docker及容器 =====
  
-* 安装Docker +  * 安装Docker 
-* Docker配置 +  * Docker配置 
-* 创建Dockerfile +  * 创建Dockerfile 
-* 通过Dockerfile生成镜像 +  * 通过Dockerfile生成镜像 
-* 基于镜像生成容器+  * 基于镜像生成容器
  
-Docker安装+====== Docker安装 ======
  
-## Docker for Windows+===== Docker for Windows =====
  
-* Windows版本要求:Win10,64位,Pro/Enterprise/Education版,1607以上版本 +  * Windows版本要求:Win10,64位,Pro/Enterprise/Education版,1607以上版本 
-* 需要打开Hyper-V +  * 需要打开Hyper-V 
-* 下载Docker for Windows然后打开下载的文件按照提示安装即可+  * 下载Docker for Windows然后打开下载的文件按照提示安装即可
  
-## Docker CE for Ubuntu+===== Docker CE for Ubuntu =====
  
-参考[Docker CE for Ubuntu官方文档](https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/)+参考[[https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/|Docker CE for Ubuntu官方文档]]
  
-* Ubuntu版本:64位,14.04/16.04/17.04/17.10以上版本 +  * Ubuntu版本:64位,14.04/16.04/17.04/17.10以上版本 
-* 设置Ubuntu源+  * 设置Ubuntu源
  
-```bash+<code 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+    software-properties-common
 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 sudo add-apt-repository \ sudo add-apt-repository \
- "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ +    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ 
- $(lsb_release -cs) \ +    $(lsb_release -cs) \ 
- stable" +    stable" 
-```+</code> 
 +  * 安装DockerCE
  
-* 安装DockerCE +<code bash>
- +
-```bash+
 sudo apt-get update sudo apt-get update
 sudo apt-get install docker-ce sudo apt-get install docker-ce
-```+</code> 
 +  * 验证安装是否成功
  
-* 验证安装是否成功 +<code bash>
- +
-```bash+
 sudo docker run hello-world sudo docker run hello-world
-```+</code> 
 +===== Docker CE for CentOS (通过yum安装) =====
  
-## Docker CE for CentOS (通过yum安装)+参考[[https://docs.docker.com/engine/installation/linux/docker-ce/centos/|Docker CE for CentOS官方安装文档]]
  
-参考[Docker CE for CentOS官方安装文档](https://docs.docker.com/engine/installation/linux/docker-ce/centos/)+  * 安装需要的其他程序 
 +<code>
  
-* 安装需要的其他程序 
- 
-``` 
     sudo yum install -y yum-utils \     sudo yum install -y yum-utils \
       device-mapper-persistent-data \       device-mapper-persistent-data \
       lvm2       lvm2
-``` 
  
-* 配置Docker到yum库+</code>
  
-```+  * 配置Docker到yum库 
 + 
 +<code>
     sudo yum-config-manager \     sudo yum-config-manager \
       --add-repo \       --add-repo \
       https://download.docker.com/linux/centos/docker-ce.repo       https://download.docker.com/linux/centos/docker-ce.repo
-``` 
  
-* 安装Docker+</code>
  
-```+  * 安装Docker 
 + 
 +<code>
     sudo yum install docker-ce     sudo yum install docker-ce
-``` 
  
-* 启动Docker+</code> 
 + 
 +  * 启动Docker
  
-```+<code>
     sudo systemctl start docker     sudo systemctl start docker
-``` 
  
-## Docker Toolbox+</code>
  
-## Docker for ArchLinux+===== Docker CE for CentOS(Offline) =====
  
-```bash+参照:[[https://docs.expertflow.com/chat/latest/hybrid-chat-deployment/docker-based-deployment/setup-docker-engine-on-centos-offline|Setup Docker Engine on Centos Offline - Hybrid Chat]] 
 + 
 +==== 下载安装包 ==== 
 + 
 + 
 +===== Docker Toolbox ===== 
 + 
 +===== Docker for ArchLinux ===== 
 + 
 +<code bash>
 # Arch源自带docker安装包,所以直接使用pacman就可以安装 # Arch源自带docker安装包,所以直接使用pacman就可以安装
 sudo pacman -Sy docker sudo pacman -Sy docker
-```+</code> 
 +====== Docker配置 ======
  
-Docker配置+===== Docker国内镜像加速 =====
  
-## Docker国镜像加速+参考[[https://www.docker-cn.com/registry-mirror|Docker国镜像加速]]
  
-参考[Docker中国镜像加速](https://www.docker-cn.com/registry-mirror)+在''%%/etc/docker/daemon.json%%''(如果没有该文件则创建该文件)中添加如下内容:
  
-在`/etc/docker/daemon.json`(如果没有该文件则创建该文件)中添加如下内容: +<code>
- +
-```json+
 { {
   "registry-mirrors": ["https://registry.docker-cn.com"]   "registry-mirrors": ["https://registry.docker-cn.com"]
 } }
-```+</code> 
 +如果是阿里云服务器,建议使用阿里云镜像加速,具体见https:%%//%%www.jianshu.com/p/1a4025c5f186
  
-如果是阿里云服务器,建议使用阿里云镜像加速,具体见https://www.jianshu.com/p/1a4025c5f186+===== Docker for Linux安装后配置 =====
  
-## Docker for Linux安装后配置 +==== 非root用户使用Docker ====
- +
-### 非root用户使用Docker+
  
 如果将当前用户添加到docker用户组: 如果将当前用户添加到docker用户组:
  
-```+<code>
   sudo usermod -aG docker $USER   sudo usermod -aG docker $USER
-``` +</code>
 如果将其他用户添加到docker用户组: 如果将其他用户添加到docker用户组:
  
-```+<code>
   sudo usermod -aG docker <user_name>   sudo usermod -aG docker <user_name>
-```+</code> 
 +====== Docker常用操作 ======
  
-Docker常用操作+===== Docker操作流程 =====
  
-## Docker操作流程+  * 获取镜像:可以通过''%%docker pull <image_author>/<image_name>%%''拉取已有镜像,也可以通过''%%docker build -t <image_name> .%%''通过Dockerfile生成镜像 
 +  * 生成容器:''%%docker run --name <container_name> -p <host_port>:<container_port> -dit <image_name>[:image_version]%%'' 
 +  * 发布镜像:''%%docker commit [-m <message>] <container_name> <image_name>[:image_version]%%'', ''%%docker push <username>/<image_name>[:tag]%%''
  
-* 获取镜像:可以通过`docker pull <image_author>/<image_name>`拉取已有镜像,也可以通过`docker build -t <image_name> .`通过Dockerfile生成镜像 +===== Docker镜像操作 =====
-* 生成容器:`docker run --name <container_name> -p <host_port>:<container_port> -dit <image_name>[:image_version]` +
-* 发布镜像:`docker commit [-m <message>] <container_name> <image_name>[:image_version]`, `docker push <username>/<image_name>[:tag]`+
  
-## Docker镜像操作+  * 查看镜像:''%%docker images%%'', ''%%docker images -as%%'' 
 +  * 删除镜像:''%%docker rmi <username>/<image_name>%%'' 
 +  * 导出镜像:''%%docker save -o <image_file_path> <image_name>%%'' 
 +  * 导入镜像:''%%docker load -i <image_file_path>%%''
  
-* 查看镜像:`docker images`, `docker images -as` +===== Docker容器操作 =====
-* 删除镜像:`docker rmi <username>/<image_name>+
-* 导出镜像:`docker save -o <image_file_path> <image_name>+
-* 导入镜像:`docker load -i <image_file_path>`+
  
-## Docker容器操作+  * 查看容器:''%%docker container%%''或''%%docker ps%%'',''%%docker ps -a%%''(查看所有容器,包括已经停止的容器), ''%%docker ps -as%%''(查看所有容器并显示容器占用的空间大小) 
 +  * 停用容器:''%%docker stop <container_name_or_container_id>%%'' 
 +  * 启动容器:''%%docker start <container_name_or_container_id>%%'' 
 +  * 删除容器:''%%docker rm <container_name_or_container_id>%%''
  
-* 查看容器:`docker container`或`docker ps`,`docker ps -a`(查看所有容器,包括已经停止的容器), `docker ps -as`(查看所有容器并显示容器占用的空间大小) +===== Docker复制操作 =====
-* 停用容器:`docker stop <container_name_or_container_id>+
-* 启动容器:`docker start <container_name_or_container_id>+
-* 删除容器:`docker rm <container_name_or_container_id>`+
  
-## Docker复制操作+  * 系统复制到容器:''%%docker cp <系统文件路径> <容器>:<容器路径>%%'' 
 +  * 容器复制到系统:''%%docker cp <容器>:<文件路径> <系统路径>%%'' 
 +  * 容器之间不能相互copy
  
-* 系统复制到容器:`docker cp <系统文件路径> <容器>:<容器路径>+====== Dockerfile ======
-* 容器复制到系统:`docker cp <容器>:<文件路径> <系统路径>+
-* 容器之间不能相互copy +
- +
-Dockerfile+
  
 Java Web示例: Java Web示例:
  
-```bash+<code bash>
 # 基于Uuntu16.04 # 基于Uuntu16.04
 FROM ubuntu:16.04 FROM ubuntu:16.04
Line 211: Line 215:
  
 CMD ~/start.sh && /bin/bash CMD ~/start.sh && /bin/bash
-``` +</code>
 Django示例 Django示例
-```bash+ 
 +<code bash>
 # 基于Uuntu16.04 # 基于Uuntu16.04
 FROM ubuntu:16.04 FROM ubuntu:16.04
Line 263: Line 267:
  
 CMD ~/start.sh && /bin/bash CMD ~/start.sh && /bin/bash
-```+</code> 
 +====== 常见问题解决 ======
  
-# 常见问题解决+===== 修改已有容器的端口映射 =====
  
-## 修改已有容器的端口映射+==== 方法一:提交容器为新镜像,删除原容器后重新创建一个容器,创建时修改端口映射 ====
  
 +==== 方法二:直接修改容器的配置文件(Docker version 17.09.0-ce, build afdb6d4测试通过) ====
  
 +参考[[https://mybrainimage.wordpress.com/2017/02/05/docker-change-port-mapping-for-an-existing-container/|Docker Change Port Mapping for an Existing Container]](需要自备梯子)
  
-### 方法一:提交容器为新镜像,删除原容器后新创建一个容器创建时修改端口映射+  * 使用docker inspect命令查看容器的id 
 +  * **停掉docker服务(这一步非常不能省略)**
  
-### 方法二:直接修改容器的配置文件(Docker version 17.09.0-ce, build afdb6d4测试通过)+<code> 
 +sudo service docker stop 
 +</code> 
 +  * 修改config.v2.json文件(如果修改已有端口映射可以跳此步骤
  
-参考[Docker Change Port Mapping for an Existing Container](https://mybrainimage.wordpress.com/2017/02/05/docker-change-port-mapping-for-an-existing-container/)(需要自备梯子)+<code> 
 +sudo vim /var/lib/docker/containers/<container id>/config.v2.json 
 +# 在ExposedPorts中添加类似"8888/tcp": {} 
 +</code> 
 +  * 修改hostconfig.json文件
  
-* 使用docker inspect命令查看容器的id+<code> 
 +sudo vim /var/lib/docker/containers/<container id>/hostconfig.json 
 +# 添加或修改PortBindings,类似 "80/tcp":[{"HostIp": "","HostPort": "80"}], 
 +</code> 
 +  * 重新启动docker服务
  
-**停掉docker服务(这一步非常重要,不能省略)**+<code> 
 +sudo service docker start 
 +</code> 
 +  启动docker容器
  
-``` +<code> 
-sudo service docker stop +sudo docker start <container_id_or_container_name> 
-```+</code> 
 +  * 启动docker容器内应该启动的程序或者服务(如果需要手动启动的情况下)
  
-* 修改config.v2.json文件(如果修改已有端口映射可以跳过此步骤)+===== 自动启动容器内的service =====
  
-``` +  * Dockerfile方式:
-sudo vim /var/lib/docker/containers/<container id>/config.v2.json +
-# 在ExposedPorts中添加类似"8888/tcp": {} +
-```+
  
-* 修改hostconfig.json文件+在dockerfile中通过加入''%%CMD service <service_name> start && /bin/bash%%''。[[https://stackoverflow.com/questions/25135897/how-to-automatically-start-a-service-when-running-a-docker-container|参考链接]]
  
-``` +  * Image方式:
-sudo vim /var/lib/docker/containers/<container id>/hostconfig.json +
-# 添加或修改PortBindings,类似 "80/tcp":[{"HostIp": "","HostPort": "80"}], +
-```+
  
-* 重新启动docker服务+在run image的时候加入需要启动时执行的命令或者脚本即可,如果container已经存在则提交后再run,类似''%%docker run --name=test -dit ubuntu service <service_name> start && /bin/bash%%''
  
-``` +===== Tomcat在容器内通过service方式启动提示Failed =====
-sudo service docker start +
-```+
  
-* 启动docker容器+在执行''%%docker run%%''命令时,增加参数''%%--cap-add SYS_PTRACE%%''
  
-``` +===== 修改Docker镜像和容器文件路径 =====
-sudo docker start <container_id_or_container_name> +
-```+
  
-* 启动docker容器内应该启动的程序或者服务(如果需要手动启动的情况下)+参考链接:[[https://stackoverflow.com/questions/24309526/how-to-change-the-docker-image-installation-directory|How to change the docker image installation directory?]],[[https://forums.docker.com/t/how-do-i-change-the-docker-image-installation-directory/1169|How do I change the Docker image installation directory?]]
  
-## 自动启动容器内的service+Docker for Linux的镜像和容器文件默认存储在/var/lib/docker文件夹中,可以改为其他路径,修改步骤为
  
-Dockerfile方式+  停用Docker''<nowiki>service docker stop</nowiki>'' 
 +  * 备份原文件夹:''<nowiki>tar czf ~/docker.tar.gz /var/lib/docker</nowiki>'' 
 +  * 移动/var/lib/docker文件夹到其他路径(**一定要使用mv命令,而不能cp再删除原文件夹** ,否则会出现容器内service start失败):''<nowiki>mv /var/lib/docker ~/</nowiki>'' 
 +  * 修改docker daemon配置,即修改/etc/docker/daemon.json(如果没有则创建该文件),增加''<nowiki>"graph": "/home/test/docker"</nowiki>'' 到daemon.json文件中,Docker17以后,graph参数被禁用了,需要改为data-root。 
 +  * 启用Docker:''<nowiki>service docker start</nowiki>'' 
 +  * 启动容器:''<nowiki>docker start <docker_name></nowiki>''
  
-在dockerfile中通过加入`CMD service <service_name> start && /bin/bash`。[参考链接](https://stackoverflow.com/questions/25135897/how-to-automatically-start-a-service-when-running-a-docker-container) 
  
-* Image方式:+===== 容器内中文字符无法显示 =====
  
-在run image的候加入需要启动时执行的命令或者脚本即可,如果container已经存在则提交后再run,类似`docker run --name=test -dit ubuntu service <service_name> start && /bin/bash`+解决方案:
  
-## Tomcat在容器内通过service方式启动提Failed+  * 查看是否支持中文:容器内执行''locale'' 和''locale -a'' ,后者输出结果包含C.UTF-8则表支持中文,前者输出结果不是C.UTF-8(例如POSIX)则表示当前设置不是中文; 
 +  * 如果支持中文,则打开''/etc/profile'' 文件,最后加入''export LANG=C.UTF-8'' 以支持中文; 
 +  * 保存修改后的文件,并执行''source /etc/profile'' 以生效(每次容器重启后都需要执行)
  
-在执行`docker run`命令时,增加参数`--cap-add SYS_PTRACE`+永久解决方案:
  
-## 修改Docker镜像和容器文件路径 
  
-参考链接[How to change the docker image installation directory?](https://stackoverflow.com/questions/24309526/how-to-change-the-docker-image-installation-directory),[How do I change the Docker image installation directory?](https://forums.docker.com/t/how-do-i-change-the-docker-image-installation-directory/1169)+==== 方法一:docker run时增加-e LANG=C.UTF-8 ====
  
-Docker for Linux镜像和容器文件默认存储在/var/lib/docker件夹,可以改为其他路径,修改步骤为+==== 方法二:Dockerfile中增加ENV LANG=C.UTF-8 ==== 
 + 
 +===== Redhat EL 6.8 docker 安装问题 ===== 
 + 
 +按照网上常见办法去安装docker-io,一直失败,无奈只能采用离线安装的方式进行解决,主要的解决办法如下: - 下载离线需要的[[http:%%//%%w3.153.lvruan.com/uploadfile/2017/docker1.7.1.zip|依赖包]], 备用下载地址: [[https:%%//%%pan.baidu.com/s/1-07Inu8OvbumBJcf3Iy9tA|百度云盘]] 提取码: rhi3 - 按照依赖包里面的readme 安装即可 
 + 
 +===== 容器内vim中乱码 ===== 
 + 
 +~/.vimrc中添加如下内容(参考[[https://blog.csdn.net/cuigelasi/article/details/82852464|Docker 容器中乱码解决方案_cuigelasi的博客-CSDN博客_docker文乱码]]) 
 + 
 +<code> 
 +:set encoding=utf-8 
 +:set fileencodings=ucs-bom,utf-8,cp936 
 +:set fileencoding=gb2312 
 +:set termencoding=utf-8 
 +</code> 
 +===== 容器内git log中文乱码 =====
  
-* 停用Docker`service docker stop` +参考[[https://www.shangyexin.com/2020/01/20/docker_ubuntu_chinese/|docker使用Ubuntu中乱码问题解决 - 尚叶鑫的个人主页]]
-* 备份原文件夹:`tar czf ~/docker.tar.gz /var/lib/docker` +
-* 移动/var/lib/docker文件夹到其他路径(**一定要使用mv命令,而不能cp再删除原件夹**,否则会出现容器内service start失败):`mv /var/lib/docker ~/` +
-* 修改docker daemon配置,即修改/etc/docker/daemon.json(如果没有则创建该文件),增加`"graph": "/home/test/docker"`到daemon.json文件中。 +
-* 启用Docker:`service docker start` +
-* 启动容器:`docker start <docker_name>`+
  
-## 容器内文字符无法显示+<code bash> 
 +git config --global i18n.commitencoding utf-8 
 +git config --global i18n.logoutputencoding utf-8 
 +</code> 
 +执行上述命令后,在~/.bashrc加入''%%export LESSCHARSET=utf-8%%''
  
-### 方法一:`docker run`时增加`-e LANG=C.UTF-8` 
  
-### 方法二:Dockerfile中增加`ENV LANG=C.UTF-8` 
docker.1560752467.txt.gz · Last modified: 2021/02/10 21:29 (external edit)