Docker学习

一、安装Docker

1.1、环境:centos7

[twx@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

安装命令:sudo yum install -y docker

启动守护进程:sudo service docker start

[twx@localhost ~]$ sudo service docker start
Redirecting to /bin/systemctl start  docker.service
[twx@localhost ~]$ sudo service docker status
Redirecting to /bin/systemctl status  docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2016-08-08 15:27:30 CST; 25s ago
     Docs: http://docs.docker.com

二、Docker入门

2.1、检查docker程序信息

sudo docker info

该命令会返回所有容器和镜像的数量以及其他一些信息

2.2 创建容器

sudo docker run -i -t ubuntu /bin/bash

ubuntu 镜像名称
-i 标志保证容器中得STDIN(标准输入)是开启的
-t 为容器分配一个伪tty终端

ubuntu镜像是一个基础镜像(base image)。输入docker run命令时,会首先在本地检查是否存在ubuntu镜像,如果没有,就从远程仓库pull到本地,然后再根据此镜像创建容器。

[twx@localhost ~]$ sudo docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
Trying to pull repository docker.io/library/ubuntu ... 
latest: Pulling from docker.io/library/ubuntu
43db9dbdcb30: Pull complete 
2dc64e8f8d4f: Pull complete 
670a583e1b50: Pull complete 
183b0bfcd10e: Pull complete 
Digest: sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54b
Status: Downloaded newer image for docker.io/ubuntu:latest
root@eaa81433c057:/# 

容器创建成功后,会在容器中运行/bin/bash命令,启动bash shell。

我们可以输入hostname 查看容器的名字

root@eaa81433c057:/# hostname
eaa81433c057

2.3、退出容器

exit

一旦退出容器,/bin/bash命令也就结束了,随之容器也就停止了运行。

2.4、查看容器列表

sudo docker ps 查看正在运行的容器
sudo docker ps -a 查看所有容器
sudo docker ps -l 查看最后一次运行的容器

2.5、容器命名

[twx@localhost ~]$ sudo docker run --name twx_the_container -i -t ubuntu /bin/bash
root@ea5e6646e432:/# 

通过–name+ 名称 就能创建一个指定名称的容器了。

2.6、启动/停止容器

sudo docker start/stop + 容器名称

[twx@localhost ~]$ sudo docker start twx_the_container
twx_the_container
[twx@localhost ~]$ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ea5e6646e432        ubuntu              "/bin/bash"         3 minutes ago       Up 34 seconds                           twx_the_container

2.7、docker attach

2.8、创建守护式容器

[twx@localhost ~]$ sudo docker run --name daemon_dave -d ubuntu /bin/bash -c "while true;do echo hello world;sleep 1;done;"
[sudo] password for twx: 
0df0744b2f405a4b79c55f574f37331dd0f8c7cdafe23903a82b04a272961e41

-d 将容器放到后台运行

2.9、查看容器内部日志

sudo docker logs + 容器名称

2.10、查看容器内部进程

sudo docker top+容器名称

sudo docker top daemon_dave
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                9014                5145                0                   16:11               ?                   00:00:00  

2.11、在容器内部运行进程

sudo docker exec + 参数+容器名称+命令

[twx@localhost ~]$ sudo docker exec -i -t daemon_dave /bin/bash 
root@0df0744b2f40:/# 

2.12、docker inspect

root@0df0744b2f40:/# sudo docker inspect daemon_dave
bash: sudo: command not found
root@0df0744b2f40:/# exit
exit
[twx@localhost ~]$ sudo docker inspect daemon_dave
[
    {
        "Id": "0df0744b2f405a4b79c55f574f37331dd0f8c7cdafe23903a82b04a272961e41",
        "Created": "2016-08-08T08:11:37.29923545Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true;do echo hello world;sleep 1;done;"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 9014,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2016-08-08T08:11:37.950360729Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        }....

2.13、删除容器

sudo docker rm + 容器名称
运行中得docker容器是无法删除的。


三、使用Docker镜像和仓库

3.1、Docker的概念

自行Google

3.2、列出镜像

sudo docker images

本地镜像都保存在Docker宿主机的/var/lib/docker目录下。

3.3 拉取镜像

sudo docker pull +仓库名称/镜像名称

可以在仓库名后面加上一个冒号和标签名来指定该仓库中的某一镜像。

3.4 查找镜像

sudo docker search + 镜像名

[twx@localhost ~]$ sudo docker search s
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/oddrationale/docker-s   s Docker image                        86                   [OK]
docker.io   docker.io/tommylau/s                                                              44                   [OK]
docker.io   docker.io/vimagick/s-libev        A lightweight secured socks5 proxy for emb...   38                   [OK]
docker.io   docker.io/s/s-libev                                                     26                   [OK]
docker.io   docker.io/vimagick/s              A secure socks5 proxy, designed to protect...   9                    [OK]
docker.io   docker.io/menghan/s               s server                              6                    [OK]
docker.io   docker.io/imlonghao/s-libev       A docker image for s-libev            4                    [OK]
docker.io   docker.io/frankzhang/s-c          A s repo, https://github.com/zju...   2                    [OK]
docker.io   docker.io/imlonghao/s-python      A docker image for s-python           2                    [OK]
docker.io   docker.io/baselibrary/s           s                                     1                    [OK]
docker.io   docker.io/bluebu/s-privoxy        s client for socks5 proxy privox...   1                    [OK]
docker.io   docker.io/chenzhiwei/s            Shadowsocks socket proxy. (Image size 77M)      1                    [OK]
docker.io   docker.io/gaoyifan/s-manyuser     s manyuser                            1                    [OK]

3.5、构建镜像

构建镜像有两种方式:
1. commit
2. 使用docker build命令 和Dockerfile 文件

3.5.1 使用docker commit命令

  • 登陆docker 账户
[twx@localhost ~]$ sudo docker login
Username (slimteaegg): slimteaegg
Password: 
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
  • 进入刚创建的twx_the_container容器内部
    sudo docker attach twx_the_container
  • 接着更新一下apt包
    root@ea5e6646e432:/# apt-get -y update
  • 安装apache2
    apt-get -y install apache2
  • 退出容器,提交容器到我们的个人仓库
    sudo docker commit twx_the_container slimteaegg/apache2
  • 查看一下镜像列表
    sudo docker images
[twx@localhost ~]$ sudo docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
slimteaegg/apache2   latest              7c048d3857dd        8 seconds ago       262.7 MB
docker.io/ubuntu     latest              42118e3df429        2 weeks ago         124.8 MB

3.5.2、使用Dockerfile构建镜像

  • 创建Dockerfile文件
mkdir static_web
cd static_web
touch Dockerfile
  • 编辑Dockerfile
#Version:0.0.1
FROM ubuntu:latest
MAINTAINER Tangwenxing "[email protected]"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi,this is a test image' > /usr/share/nginx/html/index.html
EXPOSE 80

FROM:指定一个已经存在的镜像,后续指令都基于该镜像进行
MAINTAINER: 指定该镜像的作者以及作者的电子邮箱
RUN: 在当前镜像中运行指定的命令
EXPOSE:指定容器的端口。出于安全原因,Docker并不会自动打开该端口,而是需要在docker run 时指定需要打开哪些端口。

  • 开始执行构建命令
cd static_web
sudo docker build -t="slimteaegg/static_web" .

-t 为新镜像设定仓库和名称
该命令最后的.告诉Docker到本地目录中去找Dockerfile文件

  • 构建成功以后,查看一下镜像列表
[twx@localhost static_web]$ sudo docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
slimteaegg/static_web   latest              7b096462ae9d        36 seconds ago      220.4 MB
slimteaegg/apache2      latest              7c048d3857dd        13 minutes ago      262.7 MB
docker.io/ubuntu        latest              42118e3df429        2 weeks ago         124.8 MB

3.6、基于新构建的镜像启动容器

[twx@localhost static_web]$ sudo docker run -d -p 80 --name static_web slimteaegg/static_web nginx -g "daemon off;"
2c8e63093254bf1c34814ea8af97861940cf069aa63ff5114fc0116952e0a514

-d 告诉docker以分离(Detached)的方式在后台运行

-p 的用法有几种:
1.-p + 端口号 宿主机随机分配一个端口映射到容器端口号上
2. -p 8080:80 将宿主机的8080端口映射到容器80端口上。

Docker提供了一种更简单的方式,即-P参数。该参数可以用来对外公开在Dockerfile中得EXPOSE指令中设置的所有端口

sudo docker run -d -P --name static_web slimteaegg/static_web nginx -g "daemon off;"

该命令会将容器内的80端口对宿主机公开,并且绑定到宿主机的一个随机端口上。


3.6.1、docker port命令

docker port + 容器名+ 容器端口号
返回宿主机映射的端口号
[twx@localhost static_web]$ sudo docker port static_web 80
0.0.0.0:32768


3.7、Dockerfile指令

3.7.1、CMD

3.7.2、ENTRYPOINT

3.7.3、WORKDIR

3.7.4、ENV

3.7.5、USER

3.7.6、VOLUME

3.7.7、ADD

3.7.9、ONBUILD

3.8、将镜像推送到Docker Hub

sudo docker push slimteaegg/static_web

你可能感兴趣的:(docker)