docker安装配置使用

docker容器

  • 容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名等
(1)与宿主机使用同一个内核,性能损耗小;
(2)不需要指令级模拟;
(3)容器可以在CPU核心的本地运行指令,不需要任何专门的解释机制;
(4)避免了准虚拟化和系统调用替换中的复杂性;
(5)轻量级隔离,在隔离的同时还提供共享机制,以实现容器与宿主机的资源共享。
  • centos7.6

  • 10.0.0.202

  • purple

  • docker的主要组成部分

docker是传统的CS架构分为docker client和docker server,向mysql一样    

命令:docker version
[root@controller ~]# docker version 
Client:
 Version:	17.12.0-ce
 API version:	1.35
 Go version:	go1.9.2
 Git commit:	c97c6d6
 Built:	Wed Dec 27 20:10:14 2017
 OS/Arch:	linux/amd64

Server:
 Engine:
  Version:	17.12.0-ce
  API version:	1.35 (minimum version 1.12)
  Go version:	go1.9.2
  Git commit:	c97c6d6
  Built:	Wed Dec 27 20:12:46 2017
  OS/Arch:	linux/amd64
  Experimental:	false
  
docker info(如果要做监控)
docker主要组件有:镜像、容器、仓库, 网络,存储

启动容器必须需要一个镜像,仓库中只存储镜像
容器---镜像---仓库

安装

  • 安装源

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
  • 换源之后可直接yum安装

    [root@purple ~]# yum install -y docker
    [root@purple ~]# systemctl start docker.service
    [root@purple ~]# systemctl enable docker.service
    
    • 启动第一个容器前需要配置docker镜像加速
vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
[root@purple ~]# systemctl restart docker.service

镜像

  • 创建容器需要有依赖容器运行的镜像

  • 获取镜像的方式有两种

  • 一种是手动上传镜像

    • 使用rz直接将镜像上传到 /var/lib/docker/containers/ 目录下

      此时使用查看镜像列表命令
      [root@purple /var/lib/docker/containers]# docker images    #列出镜像或者docker image ls
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      显示没有镜像
      我们使用导入镜像命令导入镜像
      docker load  	
      [root@purple /var/lib/docker/containers]# docker load -i centos6.9 
      b5e11aae8a8e: Loading layer 202.9 MB/202.9 MB
      Loaded image: centos:6.9
      [root@purple /var/lib/docker/containers]# docker images
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      centos              6.9                 adf829198a7f        15 months ago       195 MB
      此时就发现了可用于创建容器的镜像
      
  • 一种 是直接在网上拉取

使用命令 docker search 查找网上的可用镜像
[root@purple /var/lib/docker/containers]# docker search centos
INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/centos                             The official build of CentOS.                   5684      [OK]       
docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              125                  [OK]
[root@purple /var/lib/docker/containers]# docker search niginx
INDEX       NAME                                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/28may1988/niginx-demo                                                              0                    
docker.io   docker.io/316213788/niginx                   qqqqq                                           0                                 
之后使用docker pull (选中的镜像名称) 将网上镜像下载到本地
[root@purple /var/lib/docker/containers]# docker pull docker.io/ansible/centos7-ansible
Using default tag: latest
Trying to pull repository docker.io/ansible/centos7-ansible ... 
latest: Pulling from docker.io/ansible/centos7-ansible
45a2e645736c: Pull complete 
1c3acf573616: Pull complete 
edcb61e55ccc: Pull complete 
cbae31bad30a: Pull complete 
aacbdb1e2a62: Pull complete 
fdeea4fb835c: Pull complete 
Digest: sha256:39eff7d56b96530d014083cd343f7314c23acbd1ecf37eb75a71a2f6584d0b02
Status: Downloaded newer image for docker.io/ansible/centos7-ansible:latest
[root@purple /var/lib/docker/containers]# docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
centos                              6.9                 adf829198a7f        15 months ago       195 MB
docker.io/ansible/centos7-ansible   latest              688353a31fde        2 years ago         447 MB
--补充
删除镜像
	docker rmi  (要删除的镜像名称)
[root@purple /var/lib/docker/containers]# docker rmi docker.io/ansible/centos7-ansible
[root@purple /var/lib/docker/containers]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              6.9                 adf829198a7f        15 months ago       195 M

容器

[root@purple /var/lib/docker/containers]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              6.9                 adf829198a7f        15 months ago       195 MB
[root@purple /var/lib/docker/containers]# docker run -d -p 80:80 centos:6.9 
90c41f4e28b1b332aa4d533b99d2724d3ac0f7098a24a262240e035172faec5f
- 参数
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
centos:6.9 docker镜像的名字
[root@purple /var/lib/docker/containers]# docker ps    #查看正在运行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@purple /var/lib/docker/containers]# docker ps -all    #查看所有容器
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
90c41f4e28b1        centos:6.9          "/bin/bash"         About a minute ago   Exited (0) About a minute ago                       condescending_aryabhata
通过上述查看容器的命令我们发现容器创建成功了,但是并没有运行
[root@purple /var/lib/docker/containers]# docker start  90c41f4e28b1   #启动容器
90c41f4e28b1
[root@purple /var/lib/docker/containers]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
通过启动,我们发现容器可以成功启动,但是启动的瞬间就自动停止运行了,这是因为我们创建容器时却是让容器运行下去的解释器,所以我们需要删除容器并添加解释器创建
删除容器
[root@purple /var/lib/docker/containers]# docker rm 90c41f4e28b1
- 批量删除容器
    docker rm -f `docker ps -a -q`

[root@purple /var/lib/docker/containers]# docker run -it  -p 80:80 --name nginx centos:6.9 /bin/bash
[root@a689cdcd8ea4 /]# 
--参数
-it   分配交互式的终端
--name 指定容器的名字
/bin/sh覆盖容器的初始命令
创建容器之后会直接进入容器内部
[root@a689cdcd8ea4 /]# exit      # 退出容器
[root@purple /var/lib/docker/containers]# docker ps -all
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                        PORTS               NAMES
a689cdcd8ea4        centos:6.9          "/bin/bash"         About a minute ago   Exited (130) 20 seconds ago                       nginx
此时发现推出容器之后,容器会立刻停止运行,此时将容器启动就可以使容器运行下去了
[root@purple /var/lib/docker/containers]# docker start  a689cdcd8ea4
停止容器
	docker stop a689cdcd8ea4
杀死容器
	docker kill a689cdcd8ea4
进入容器
     docker exec -it a689cdcd8ea4 /bin/bash

  • 如果你的镜像是centos7.0以上版本,在容器中使用systemctl的命令时会报错,此时你需要使用以下命令创建容器才能在容器中正常使用systemctl命令
  docker run --privileged -d -ti -e "container=docker"  -v /sys/fs/cgroup:/sys/fs/cgroup centos7  /usr/sbin/init
  

仓库

  • Docker Registry就是完成搭建本地容器仓库,简单来说就是讲一个专门的服务器作为镜像仓库,启用一个Docker Registry容器实例提供服务。
[root@purple /var/lib/docker/containers]# docker pull  docker.io/registry
[root@purple /var/lib/docker/containers]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  docker.io/registry:latest 
1e1e60dd80f9f934e51b868eb70d856a93b1e79920c18d5020b7947970225701

接下来我们需要通过http://10.0.0.202:5000/v2来判断registry服务是否正常启动,如果出现“{}”既可以说明服务运行正常。

上传镜像到私有仓库:
a:给镜像打标签
[root@purple /var/lib/docker/containers]# docker tag centos:6.9 10.0.0.202:5000/centos:v1
b:上传镜像
[root@purple /var/lib/docker/containers]# docker push 10.0.0.202:5000/centos:v1
如果遇到报错:
The push refers to repository [10.0.0.11:5000/centos6.9_ssh]
Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client
解决方法:
vim  /etc/docker/daemon.json
{
  "insecure-registries": ["10.0.0.202:5000"]
}
systemctl restart docker
[root@purple /var/lib/docker/containers]# docker push 10.0.0.202:5000/centos:v1 
The push refers to a repository [10.0.0.202:5000/centos]
b5e11aae8a8e: Layer already exists 
v1: digest: sha256:0e59afcc4d7a07fcbd6285f79f6f377ce997ae091c10f8e3c2feb2bcda90b06c size: 529


  • 优化本地仓库图形界面
[root@purple /var/lib/docker/containers]# docker pull konradkleine/docker-registry-frontend:v2
[root@purple /var/lib/docker/containers]# systemctl daemon-reload
[root@purple /var/lib/docker/containers]# docker run -d -e ENV_DOCKER_REGISTRY_HOST=10.0.0.202 -e ENV_DOCKER_REGISTRY_PORT=5000 -p 8081:80 konradkleine/docker-registry-frontend:v2
访问浏览器http://10.0.0.202:8081/home 查看上传到仓库的镜像
http://10.0.0.202:8081/repositories/20

扩展

清除仓库
1)进入docker registry的容器中
docker exec -it registry /bin/sh
2)删除/var/lib/registry/docker/registry/v2/repositories目录下的镜像
rm -fr /var/lib/registry/docker/registry/v2/repositories/centos

带basic认证的加密仓库

[root@purple ~]# yum install httpd-tools -y
[root@purple ~]# yum install -y python2-pip
[root@purple ~]# mkdir /opt/registry-var/auth/ -p
[root@purple ~]# htpasswd  -Bbn admin 123456  >> /opt/registry-var/auth/htpasswd
[root@purple ~]# docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/   -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e  "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" docker.io/registry
访问浏览器http://10.0.0.202:5000/v2/可以看到需要刷入密码
用户:admin
密码:123456

--------------purple---------------------

原文地址:https://www.cnblogs.com/jiangyatao/p/11905966.html