(1)Docker的安装 官网安装链接 :https://yeasy.gitbooks.io/docker_practice/content/
卸载旧版本 旧版本的 Docker 称为 docker 或者 docker-engine
使用以下命令卸载旧版本:
$ sudo yum remove docker
docker-common
docker-selinux
docker-engine
使用 yum 安装 执行以下命令安装依赖包:
$ sudo yum install -y yum-utils
device-mapper-persistent-data
lvm2 鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。
执行下面的命令添加 yum 软件源:
$ sudo yum-config-manager
--add-repo
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
更新 yum 软件源缓存,并安装 docker-ce 。
$ sudo yum makecache fast $ sudo yum install docker-ce
启动 Docker CE
$ sudo systemctl enable docker
$ sudo systemctl start docker
建立 docker 组:
$ sudo groupadd docker
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
测试 Docker 是否安装正确 $ docker run hello-world
Unable to find image 'hello-world:latest' locally latest:
Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/
若能正常输出以上信息,则说明安装成功
默认配置下,如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
请添加内核配置参数以启用这些功能。
$ sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
然后重新加载 sysctl.conf 即可
$ sudo sysctl -p
docker run -itd -v /var/jenkins_home:/var/jenkins jenkins
这里的 -v /var/jenkins_home:/var/jenkins
是指将本地的数据卷内容挂在到容器。
/var/jenkins_home:为本地目的,这里需要先从容器中将需要的复制内容通过docker cp命令到本地,然后再重新使用docker run命令启动容器。
/var/jenkins:为容器的目录,这里会将本地的目录内容映射过来。
(2)docker 安装 jenkins (参照:http://blog.csdn.net/mmd0308/article/details/77206563?locationNum=6&fps=1)
docker pull jenkins #获取jenkins镜像
mkdir /home/jenkins #创建目录作为数据卷
docker run -itd -p 8080:8080 -p 50000:50000 --name=jenkins -v /home/jenkins:/var/jenkins_home jenkins # 最后的jenkins ,是你pull下来的镜像名
-
-p 8080:8080 -p 50000:50000
进行端口映射 -
-v /home/jenkins:/var/jenkins_home
磁盘挂载
然后就可以通过 http://主机IP:8080访问jenkins了
(3)docker安装gogs (参照:https://github.com/gogits/gogs/tree/master/docker)
建议先创建 /var/gogs目录
# Pull image from Docker Hub.
$ docker pull gogs/gogs
# Create local directory for volume.
$ mkdir -p /var/gogs
# Use `docker run` for the first time.
$ docker run --name=gogs -p 10022:22 -p 10080:3000 -v /var/gogs:/data gogs/gogs
# Use `docker start` if you have stopped it.
$ docker start gogs
然后可以通过 http://主机IP:10080访问gogs
(4)docker安装tomcat(参照:https://hub.docker.com/_/tomcat/)
docker pull tomcat:8.0 #后面的版本号根据需求写
创建目录 mkdir /usr/local/tomcat
docker run -itd -p 8080:8080 --name tomcat --restart=always -v /usr/local/tomcat:/var/tomcat_home tomcat:8.0 #这里最后一定要写你pull后面的全名 tomcat:8.0
前面的参数都差不多
--restart=always #表示一直启动这个Tomcat (需要后台启动的软件运行时都可以加上这个参数)
Docker基本概念:
Union File System(Union FS) : 轻量级的高性能的分层文件系统,支持将文件系统中的修改进行提交和层层叠加,这个特性使得镜像可以通过分层实现和继承同时支持将不同目录挂载到同一个虚拟文件系统下。
镜像的构建:镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
Docker容器:容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的
命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID
空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
镜像和容器的关系:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
Docker仓库:一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
原生应用程序: 外观和运行起来的性能是最佳的 (性能原生就是指性能最佳)
Docker镜像:Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包删除容器:可以使用 docker container rm 来删除一个处于终止状态的容器。例如
$ docker container rm trusting_newton
如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。
镜像不包含任何动态数据,其内容在构建之后也不会被改变。
构建docker的连接:http://www.linuxidc.com/Linux/2015-07/120287.htm
查找某些特定的软件包:yum search vim
dangling images: 是指那些为 none的镜像,可以通过 docker image prune 来删除
docker删除本地镜像: docker image rm 【id】 docker image rm 7c1(ID前三位)
docker停止所有的镜像 docker stop $(docker ps -a -q)
docker删除所有的容器:docker rm $(docker ps -a -q)
运行Dockerfile创建的镜像:docker run --name web2 -d -p 81:80 nginx:v2
COPY和 ADD:此在 COPY 和 ADD 指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用
COPY 指令,仅在需要自动解压缩的场合使用 ADD
Docker查看所有镜像:docker image ls
容器和镜像的删除:https://www.cnblogs.com/q4486233/p/6482711.html
构建镜像和启动容器:
使用 docker build 来构建这个镜像:
$ docker build -t myweb:v1 .
构建好了后,我们启动一个容器:
$ docker run -d --name web -p 80:80 myweb:v1
Docker主要命令: (这是可以查看镜像的网址:https://hub.docker.com/explore/)
docker search nginx #查询nginx,如果有可以直接pull
docker pull nginx #从docker hub 中获取nginx的镜像
docker image ls #查看本地所有的镜像 //docker images 等价于 docker image ls :列出所有镜像
docker run 命令可以使得镜像产生容器 ,启动程序
示例: docker run -itd -p 80:80 --name nginx -v /var/nginx:/var/nginx_home ngnix
-i 让容器的标准输入保持打开。
-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上。
-d: 需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。
-p: 指定端口,前面的80是你访问的端口,后面80是该程序本来的端口
--name : 是你的容器名
-v :定义数据卷 /var/nginx是数据卷的位置,/var/nginx_home是数据卷挂载目录
docker ps #列出所有在运行的容器
docker ps -a #列出所有的容器(运行、不运行)
docker rm 容器id #删除容器(正在运行的容器删除 需要先执行 docker stop 容器id 命令)
docker start 容器id :重新启动容器