docker入门-环境安装及实战

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 安装
或者通过如下步骤

1.#安装依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

2.#配置yum源 使用国内的

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.#查看版本

yum list docker-ce --showduplicates | sort -r
4.选择其中一个 进行安装docker

yum -y install docker-ce-20.10.10-3.el7

镜像加速
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 产品新的进程(/bin/bash) 该命令就是在容器中执行命令。当执行 /bin/bash 时直接开启一个终端和容器交互。否则 直接返回容器中命令执行结果 如 执行 ls /tmp
exec 在容器中打开新的终端,并且可以启动新的进程
docker attach 容器id attach 直接进入容器启动命令的终端,不会启动新的进程

退出容器:
ctrl+Q[+P] 不停止容器退出,退出后容器依然运行 ,还可以通过 docker attach 再次进入交互 (教程中说要加P 自测win环境下不用加P)
exit 退出并停止容器

通过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

ca2a33a875e0        mysql               "docker-entrypoint.s鈥   37 minutes ago      Up 27 minutes       3306/tcp, 33060/tcp   vigilant_ritchie
docker@default:/$ docker exec -it ca2a33a875e0 /bin/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:/#

exec 还可以直接在容器中执行命令并返回结果,不需要进入容器内部如下,直接执行并返回了ls /tmp 命令的结果

docker@default:~$ docker exec -it 22f39c77003b ls /tmp
ks-script-eC059Y  yum.log

从容器 拷贝文件到宿主机 如下 将test.txt 复制到 容器 ,然后再熊容器中复制到宿主机中
docker cp 容器id:容器内路径:宿主机路径

docker@default:~$ docker cp ~/test.txt 22f39c77003b:/opt/test.txt
docker@default:~$ docker attach 22f39c77003b
[root@22f39c77003b opt]# ls 
test.txt  zxm
docker@default:~$ rm test.txt 
docker@default:~$ ls
docker@default:~$ docker cp 22f39c77003b:/opt/test.txt .
docker@default:~$ ls
test.txt

sudo yum install -y yum-utils
​ 添加yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

catch that elf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值