docker入门-环境安装及实战

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangxm_qz/article/details/89403561

Docker是什么
一种容器技术,基于Go语言实现
目标:“Build,Ship and Run Any App ,Anywhere”
一次封装到处运行
Docker为什么出现
开发与运维的鸿沟 避免由于环境不同而产生的矛盾 减少运维的工作量

Docker解决了什么问题
解决了运行环境和配置问题,方便做持续集成,有助于整体发布
Docker 版本:DockerCE(社区版) DockerEE(企业版)

Docker能干什么
Docker与传统的虚拟化技术差异(Vmware)
虚拟化技术就是虚拟了整套环境 ,必须有自己的操作系统
缺点:资源占用多、启动慢
而docker 容器不必有自己的操作系统而是通过 dockerEngin 来访问宿主机的系统。所以效率高很多
在这里插入图片描述在这里插入图片描述

安装
CentOSD7.6 环境下 直接运行 yum install docker-ce 即可完成 docker 安装

镜像加速
Docker 中国官方镜像加速可通过 registry.docker-cn.com 访问。配置完成下载镜像速度会更快。
配置方法:修改/etc/docker/daemon.json 文件,并添加上 registry-mirror ,如下:

[root@zk01 ~]# cd /etc/docker/
[root@zk01 docker]# ll
总用量 20
drwxr-xr-x. 5 root root    75 2月  16 23:04 certs.d
-rw-r--r--. 1 root root     3 3月  12 2019 daemon.json
-rw-------. 1 root root   244 2月  16 23:04 key.json
-rw-r--r--. 1 root root 10837 3月  12 2019 seccomp.json
[root@zk01 docker]# vi daemon.json 
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

帮助命令
docker version 查看版本
docker info 查看docker状态信息
docker --help 查看命令帮助信息

[root@zk01 docker]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Tue Mar 12 10:27:24 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Tue Mar 12 10:27:24 2019
 OS/Arch:         linux/amd64
 Experimental:    false
[root@zk01 docker]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc

镜像命令
docker images 查看本地镜像 参数 -a 列出所有镜像 -q只显示镜像id --digests 显示摘要信息 --no-trunc
cocker search +镜像名 从远程资源库中查找镜像
docker pull +镜像名 从资源库中下载镜像到本地
docker rmi 镜像id 从本地删除镜像
删除单个 docker rmi -f 镜像名
删除多个 docker rmi 镜像名1:tag1 镜像名2:tag2
删除全部 docker rmi -f $(docker images -q)

如下实例:

//查看本地镜像 发现本地没有镜像
[root@zk01 docker]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
在资源库中查找 redis 镜像
[root@zk01 docker]# docker search redis
INDEX       NAME                                       DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/redis                            Redis is an open source key-value store th...   6781      [OK]       
docker.io   docker.io/bitnami/redis                    Bitnami Redis Docker Image                      111                  [OK]
docker.io   docker.io/sameersbn/redis                                                                  76                   [OK]
下载redis镜像到本地
[root@zk01 docker]# docker pull docker.io/redis
Using default tag: latest
Trying to pull repository docker.io/library/redis ... 
latest: Pulling from docker.io/library/redis
27833a3ba0a5: Downloading [============>  
下载helloworld镜像
[root@zk01 docker]# docker pull hello-world
Using default tag: latest
Trying to pull repository docker.io/library/hello-world ... 
latest: Pulling from docker.io/library/hello-world
1b930d010525: Pull complete 
Digest: sha256:92695bc579f31df7a63da6922075d0666e565ceccad16b59c3374d2cf4e8e50e
Status: Downloaded newer image for docker.io/hello-world:latest
再次查看镜像发现本地有我们刚下载的镜像
[root@zk01 docker]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED                  SIZE
docker.io/redis         latest              a55fbf438dfd        Less than a second ago   95 MB
docker.io/hello-world   latest              fce289e99eb9        6 weeks ago              1.84 kB
根据id删除 helloworld镜像 
[root@zk01 docker]# docker rmi fce289e99eb9
Untagged: docker.io/hello-world:latest
Untagged: docker.io/hello-world@sha256:92695bc579f31df7a63da6922075d0666e565ceccad16b59c3374d2cf4e8e50e
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3
[root@zk01 docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED                  SIZE
docker.io/redis     latest              a55fbf438dfd        Less than a second ago   95 MB

容器命令

首先总结下容器和镜像的概念:
容器相当于tomcat 运行起来的状态。镜像就相当于下载的tomcat包。一个tomcat包可以同时运行在多个进程中(修改端口启动两次就可以运行多个tomcat进程)。

docker run 命令
格式 docker run [options] image [command] [ARG…]
options:–name 为容器指定一个新名称 -d 后台运行容器 -i交互方式运行 -t 启动一个伪终端 -p 指定端口映射 -P随机端口映射

我们可以通过 docker run 命令在 运行我们的 redis镜像。如下 redis 启动后直接输出了redis日志 ,如果想让redis镜像在后台启动,可以加参数-d

[root@zk01 docker]# docker run --name myredis  redis 
1:C 16 Feb 2019 16:30:44.138 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 16 Feb 2019 16:30:44.138 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 16 Feb 2019 16:30:44.138 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server 

后台启动redis 这里我们同时 将 redis 容器的 6379端口映射到 我们linux(宿主机)的 6479 端口

[root@zk01 docker]# docker run --name myredis -d  -p6479:6379  redis 
075402aeb280b24cc74a9ebbc991524f97a809378365317d79d1a17e688d3b7e
[root@zk01 docker]# 

启动后我们通过 宿主机的 ip+6479 端口就可以访问到 redis 如下图:
在这里插入图片描述

docker ps 命令列出所有运行的容器
格式:docker ps [options]
options:-a 列出所有正在运行+历史运行的容器 -l 显示最近创建的容器 -n显示最近创建的N个容器 -q 只显示容器id
docker rm 容器id 删除容器
以下示例显示出我们运行过的redis 容器,并删除容器。镜像run之后,即使又停止了容器仍然会保存在docker中,可以直接启动容器,也可以删除容器重新从镜像 run 启动容器。

[[root@zk01 docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES
7e984457f6c0        redis               "docker-entrypoint..."   About a minute ago   Exited (0) 11 seconds ago                       myredis
[root@zk01 docker]# docker rm 7e984457f6c0 

docker stop 容器id/容器名称 停止正在运行的容器
docker start 容器id/容器名称 重新运行已经停止的容器
docker restart 容器id/容器名称 重新运行正在运行的容器

[root@zk01 docker]# docker stop 075402aeb280
075402aeb280
[root@zk01 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@zk01 docker]# docker start 075402aeb280
075402aeb280
[root@zk01 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
075402aeb280        redis               "docker-entrypoint..."   22 minutes ago      Up 2 seconds        0.0.0.0:6479->6379/tcp   myredis
[root@zk01 docker]# docker restart 075402aeb280
075402aeb280
[root@zk01 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
075402aeb280        redis               "docker-entrypoint..."   22 minutes ago      Up 2 seconds        0.0.0.0:6479->6379/tcp   myredis

同时删除所有容器:docker rm -f $(docker ps -a -q) 或者 docker ps -a -q |xargs docker rm

[root@zk01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
04194ab112fd        redis               "docker-entrypoint..."   6 seconds ago       Up 5 seconds        0.0.0.0:6579->6379/tcp   myredis2
075402aeb280        redis               "docker-entrypoint..."   28 minutes ago      Up 5 minutes        0.0.0.0:6479->6379/tcp   myredis
[root@zk01 ~]# docker rm -f $(docker ps -a -q)
04194ab112fd
075402aeb280
[root@zk01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@zk01 ~]# 

docker logs 查看容器日志
docker logs --tail 100 e48bdf16e51a 查看 容器 e48bdf16e51a 日志后100行

[root@zk01 ~]# docker logs --help
Usage:  docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --help           Print usage
      --since string   Show logs since timestamp
      --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
[root@zk01 ~]# docker logs --tail 100 e48bdf16e51a
1:C 16 Feb 2019 17:07:07.055 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 16 Feb 2019 17:07:07.055 # Redis version=5.0.4, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 16 Feb 2019 17:07:07.055 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 16 Feb 2019 17:07:07.057 * Running mode=standalone, port=6379.
1:M 16 Feb 2019 17:07:07.058 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 16 Feb 2019 17:07:07.058 # Server initialized
1:M 16 Feb 2019 17:07:07.058 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1:M 16 Feb 2019 17:07:07.058 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1:M 16 Feb 2019 17:07:07.058 * Ready to accept connections
[root@zk01 ~]#

查看容器内进程 docker top e48bdf16e51a

[root@zk01 ~]# docker top  e48bdf16e51a
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
polkitd             50118               50098               0                   01:07               ?                   00:00:01            redis-server *:6379

docker inspect e48bdf16e51a 查看容器详细信息

[root@zk01 ~]# docker inspect  e48bdf16e51a
[
    {
        "Id": "e48bdf16e51a5e0a5b6ac365a0992c1040b814a38642891cc7450afe25f9086c",
        "Created": "2019-02-16T17:07:06.419932504Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "redis-server"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 50118,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2019-02-16T17:07:07.004832447Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },

进入正在运行的容器,并以前台方式运行
docker exec -t 容器id bashshell 产品新的进程
docker attach 容器id 进入容器不产生新的进程

通过docker 启动一个 centos 容器,然后查看 容器id 并执行 docker attach daadb25b14a0 进入容器,可以执行ls 命令等

docker@default:~$ docker run -itd centos /bin/bash
daadb25b14a03437ef3acdb5791139c13ff3086c18676ee349bce0bfb87d293c
docker@default:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
daadb25b14a0        centos              "/bin/bash"              11 seconds ago      Up 10 seconds                             quizzical_murdock
ca2a33a875e0        mysql               "docker-entrypoint.s鈥   17 minutes ago      Up 8 minutes        3306/tcp, 33060/tcp   vigilant_ritchie
docker@default:~$ docker attach daadb25b14a0
[root@daadb25b14a0 /]# ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
[root@daadb25b14a0 /]# ^C 
[root@daadb25b14a0 /]# exit

进入mysql 容器方法 docker exec -it ca2a33a875e0 bash

ca2a33a875e0        mysql               "docker-entrypoint.s鈥   37 minutes ago      Up 27 minutes       3306/tcp, 33060/tcp   vigilant_ritchie
docker@default:/$ docker exec -it ca2a33a875e0 bash
root@ca2a33a875e0:/# ls
bin   docker-entrypoint-initdb.d  home   media  proc  sbin  tmp
boot  entrypoint.sh               lib    mnt    root  srv   usr
dev   etc                         lib64  opt    run   sys   var
root@ca2a33a875e0:/#

从容器 拷贝文件到宿主机
docker cp 容器id:容器内路径:宿主机路径

展开阅读全文

没有更多推荐了,返回首页