Docker学习

来源:互联网 发布:嵌入式网络编程 编辑:程序博客网 时间:2024/06/05 02:04

一、安装Docker

1.1、环境:centos7

[twx@localhost ~]$ uname -aLinux 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 startRedirecting to /bin/systemctl start  docker.service[twx@localhost ~]$ sudo service docker statusRedirecting 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/bashUnable to find image 'ubuntu:latest' locallyTrying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu43db9dbdcb30: Pull complete 2dc64e8f8d4f: Pull complete 670a583e1b50: Pull complete 183b0bfcd10e: Pull complete Digest: sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54bStatus: Downloaded newer image for docker.io/ubuntu:latestroot@eaa81433c057:/# 

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

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

root@eaa81433c057:/# hostnameeaa81433c057

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/bashroot@ea5e6646e432:/# 

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

2.6、启动/停止容器

sudo docker start/stop + 容器名称

[twx@localhost ~]$ sudo docker start twx_the_containertwx_the_container[twx@localhost ~]$ sudo docker ps CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMESea5e6646e432        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_daveUID                 PID                 PPID                C                   STIME               TTY                 TIME                CMDroot                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_davebash: sudo: command not foundroot@0df0744b2f40:/# exitexit[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 shadowsocksINDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDdocker.io   docker.io/oddrationale/docker-shadowsocks   shadowsocks Docker image                        86                   [OK]docker.io   docker.io/tommylau/shadowsocks                                                              44                   [OK]docker.io   docker.io/vimagick/shadowsocks-libev        A lightweight secured socks5 proxy for emb...   38                   [OK]docker.io   docker.io/shadowsocks/shadowsocks-libev                                                     26                   [OK]docker.io   docker.io/vimagick/shadowsocks              A secure socks5 proxy, designed to protect...   9                    [OK]docker.io   docker.io/menghan/shadowsocks               shadowsocks server                              6                    [OK]docker.io   docker.io/imlonghao/shadowsocks-libev       A docker image for shadowsocks-libev            4                    [OK]docker.io   docker.io/frankzhang/shadowsocks-c          A shadowsocks repo, https://github.com/zju...   2                    [OK]docker.io   docker.io/imlonghao/shadowsocks-python      A docker image for shadowsocks-python           2                    [OK]docker.io   docker.io/baselibrary/shadowsocks           shadowsocks                                     1                    [OK]docker.io   docker.io/bluebu/shadowsocks-privoxy        shadowsocks client for socks5 proxy privox...   1                    [OK]docker.io   docker.io/chenzhiwei/shadowsocks            Shadowsocks socket proxy. (Image size 77M)      1                    [OK]docker.io   docker.io/gaoyifan/shadowsocks-manyuser     shadowsocks manyuser                            1                    [OK]

3.5、构建镜像

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

3.5.1 使用docker commit命令

  • 登陆docker 账户
[twx@localhost ~]$ sudo docker loginUsername (slimteaegg): slimteaeggPassword: WARNING: login credentials saved in /root/.docker/config.jsonLogin 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 imagesREPOSITORY           TAG                 IMAGE ID            CREATED             SIZEslimteaegg/apache2   latest              7c048d3857dd        8 seconds ago       262.7 MBdocker.io/ubuntu     latest              42118e3df429        2 weeks ago         124.8 MB

3.5.2、使用Dockerfile构建镜像

  • 创建Dockerfile文件
mkdir static_webcd static_webtouch Dockerfile
  • 编辑Dockerfile
#Version:0.0.1FROM ubuntu:latestMAINTAINER Tangwenxing "twx843571091@gmail.com"RUN apt-get updateRUN apt-get install -y nginxRUN echo 'Hi,this is a test image' > /usr/share/nginx/html/index.htmlEXPOSE 80

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

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

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

  • 构建成功以后,查看一下镜像列表
[twx@localhost static_web]$ sudo docker imagesREPOSITORY              TAG                 IMAGE ID            CREATED             SIZEslimteaegg/static_web   latest              7b096462ae9d        36 seconds ago      220.4 MBslimteaegg/apache2      latest              7c048d3857dd        13 minutes ago      262.7 MBdocker.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

0 0
原创粉丝点击