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/02/01 12:00]
jordan [Dockerfile]
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 231: Line 235:
 RUN apt-get install -y --no-install-recommends vim openssh-server wget RUN apt-get install -y --no-install-recommends vim openssh-server wget
 # 安装Apache2, python3等 # 安装Apache2, python3等
-RUN apt-get install -y --no-install-recommends git apache2 python3 python3-pip +RUN apt-get install -y --no-install-recommends git apache2 python3 python3-pip libapache2-mod-wsgi-py3 python3-setuptools python3-dev build-essential 
-RUN apt-get install -y --no-install-recommends mariadb-server mariadb-client+RUN apt-get install -y --no-install-recommends mariadb-server mariadb-client libmysqlclient-dev
  
 # 清理apt缓存 # 清理apt缓存
Line 260: Line 264:
  
 # 其他bashrc配置 # 其他bashrc配置
-RUN echo "alias ll='ls -alF'" >> ~/.start.sh+RUN echo "alias ll='ls -alF'" >> ~/.bashrc
  
 CMD ~/start.sh && /bin/bash CMD ~/start.sh && /bin/bash
-``` +</code> 
- +====== 常见问题解决 ======
-常见问题解决 +
- +
-## 修改已有容器的端口映射+
  
-### 方法一:提交容器为新镜像,删除原容器后重新创建一个容器,创建时修改端口映射+===== 修改已有容器的端口映射 =====
  
-### 方法直接修改容器的配置文件(Docker version 17.09.0-ce, build afdb6d4测试通过)+==== 方法提交容器为新镜像,删除原容器后重新创建一个容器,创建时修改端口映射 ====
  
-参考[Docker Change Port Mapping for an Existing Container](https://mybrainimage.wordpress.com/2017/02/05/docker-change-port-mapping-for-an-existing-container/)(需要自备梯子+==== 方法二:直接修改容器的配置文件(Docker version 17.09.0-ce, build afdb6d4测试通过) ====
  
-* 使用docker inspect命令查看容器的id+参考[[https://mybrainimage.wordpress.com/2017/02/05/docker-change-port-mapping-for-an-existing-container/|Docker Change Port Mapping for an Existing Container]](需要自备梯子)
  
-* **停掉docker服务(这一步非常重要,不能省略)**+  * 使用docker inspect命令查看容器的id 
 +  * **停掉docker服务(这一步非常重要,不能省略)**
  
-```+<code>
 sudo service docker stop sudo service docker stop
-```+</code> 
 +  * 修改config.v2.json文件(如果修改已有端口映射可以跳过此步骤)
  
-* 修改config.v2.json文件(如果修改已有端口映射可以跳过此步骤) +<code>
- +
-```+
 sudo vim /var/lib/docker/containers/<container id>/config.v2.json sudo vim /var/lib/docker/containers/<container id>/config.v2.json
 # 在ExposedPorts中添加类似"8888/tcp": {} # 在ExposedPorts中添加类似"8888/tcp": {}
-```+</code> 
 +  * 修改hostconfig.json文件
  
-* 修改hostconfig.json文件 +<code>
- +
-```+
 sudo vim /var/lib/docker/containers/<container id>/hostconfig.json sudo vim /var/lib/docker/containers/<container id>/hostconfig.json
 # 添加或修改PortBindings,类似 "80/tcp":[{"HostIp": "","HostPort": "80"}], # 添加或修改PortBindings,类似 "80/tcp":[{"HostIp": "","HostPort": "80"}],
-```+</code> 
 +  * 重新启动docker服务
  
-* 重新启动docker服务 +<code>
- +
-```+
 sudo service docker start sudo service docker start
-```+</code> 
 +  * 启动docker容器
  
-* 启动docker容器 +<code>
- +
-```+
 sudo docker start <container_id_or_container_name> sudo docker start <container_id_or_container_name>
-```+</code> 
 +  * 启动docker容器内应该启动的程序或者服务(如果需要手动启动的情况下)
  
-启动docker容器内应该启动的程序或者服务(如果需要手动启动情况下)+===== 自动启动容器内的service =====
  
-## 自动启动容器内的service+  * Dockerfile方式:
  
-* Dockerfile方式:+在dockerfile中通过加入''%%CMD service <service_name> start && /bin/bash%%''。[[https://stackoverflow.com/questions/25135897/how-to-automatically-start-a-service-when-running-a-docker-container|参考链接]]
  
-在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方式:
  
-* Image方式:+在run image的时候加入需要启动时执行的命令或者脚本即可,如果container已经存在则提交后再run,类似''%%docker run --name=test -dit ubuntu service <service_name> start && /bin/bash%%''
  
-run image的时候加入需要启动时执行的命令或者脚本即可,如果container已经存在则交后再run,类似`docker run --name=test -dit ubuntu service <service_name> start && /bin/bash`+===== Tomcat容器内通过service方式启动提示Failed =====
  
-## Tomcat容器内通过service方式启动提示Failed+执行''%%docker run%%''命令时,增加参数''%%--cap-add SYS_PTRACE%%''
  
-在执行`docker run`命令时,增加参数`--cap-add SYS_PTRACE`+===== 修改Docker镜像和容器文件路径 =====
  
-## 修改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?]]
- +
-参考链接:[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 for Linux的镜像和容器文件默认存储在/var/lib/docker文件夹中,可以改为其他路径,修改步骤为 Docker for Linux的镜像和容器文件默认存储在/var/lib/docker文件夹中,可以改为其他路径,修改步骤为
  
-* 停用Docker:`service docker stop` +  * 停用Docker:''<nowiki>service docker stop</nowiki>'' 
-* 备份原文件夹:`tar czf ~/docker.tar.gz /var/lib/docker` +  * 备份原文件夹:''<nowiki>tar czf ~/docker.tar.gz /var/lib/docker</nowiki>'' 
-* 移动/var/lib/docker文件夹到其他路径(**一定要使用mv命令,而不能cp再删除原文件夹**,否则会出现容器内service start失败):`mv /var/lib/docker ~/` +  * 移动/var/lib/docker文件夹到其他路径(**一定要使用mv命令,而不能cp再删除原文件夹** ,否则会出现容器内service start失败):''<nowiki>mv /var/lib/docker ~/</nowiki>'' 
-* 修改docker daemon配置,即修改/etc/docker/daemon.json(如果没有则创建该文件),增加`"graph": "/home/test/docker"`到daemon.json文件中。 +  * 修改docker daemon配置,即修改/etc/docker/daemon.json(如果没有则创建该文件),增加''<nowiki>"graph": "/home/test/docker"</nowiki>'' 到daemon.json文件中,Docker17以后,graph参数被禁用了,需要改为data-root。 
-* 启用Docker:`service docker start` +  * 启用Docker:''<nowiki>service docker start</nowiki>'' 
-* 启动容器:`docker start <docker_name>`+  * 启动容器:''<nowiki>docker start <docker_name></nowiki>'' 
 + 
 + 
 +===== 容器内中文字符无法显示 ===== 
 + 
 +临时解决方案: 
 + 
 +  * 查看是否支持中文:容器内执行''locale'' 和''locale -a'' ,后者输出结果包含C.UTF-8则表示支持中文,前者输出结果不是C.UTF-8(例如POSIX)则表示当前设置不是中文; 
 +  * 如果支持中文,则打开''/etc/profile'' 文件,最后加入''export LANG=C.UTF-8'' 以支持中文; 
 +  * 保存修改后的文件,并执行''source /etc/profile'' 以生效(每次容器重启后都需要执行) 
 + 
 +永久解决方案: 
 + 
 + 
 +==== 方法一:docker run时增加-e LANG=C.UTF-8 ==== 
 + 
 +==== 方法二: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中文乱码 ===== 
 + 
 +参考:[[https://www.shangyexin.com/2020/01/20/docker_ubuntu_chinese/|docker中使用Ubuntu中文乱码问题解决 - 尚叶鑫的个人主页]]
  
-## 容器内文字符无法显示+<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.1548993625.txt.gz · Last modified: 2021/02/10 21:29 (external edit)