个人博客

docker介绍

一、简介

docker能在你的硬件设施上运行各种配置不同的平台,它能让你将运行环境和配置代码汇总然后部署,同一个docker的配置可以在不同的环境中使用,这样降低了硬件要求和应用环境之间的耦合度。

二、安装

这里介绍下载centos下的安装步骤:

卸载旧版本

yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine

安装docker engine-community

先安装所需软件的依赖包,yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

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

设置docker仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装Docker Engine-Community 和 containerd

yum install docker-ce docker-ce-cli containerd.io

使用命令查看docker是否安装成功

docker version

启动docker服务

systemctl start docker

三、docker命令

1,运行镜像:

docker run ubuntu:15.10 /bin/echo "Hello world"
  • run: 用来运行一个容器。
  • ubuntu:15.10:指定要运行的镜像,如果docker在本机查找镜像不存在,会从镜像仓库下载公共镜像。
  • /bin/echo "Hello world":在启动的容器里执行的命令。

2,运行交互式的容器:

docker run -i -t ubuntu:15.10 /bin/bash
docker run -it ubuntu /bin/bash
  • -i:交互操作。
  • -t:终端。

注意:如果你不指定镜像的版本标签,例如你只使用ubuntu,docker默认使用ubuntu:latest镜像。我们可以在容器中执行exit命令或者CTRL+D来退出容器。

3,后台模式启动容器:

docker run -itd --name ubuntu-test ubuntu /bin/bash
  • -d:指定后台运行。
  • -name:指定容器名字。

4,查看容器运行状态:

docker ps    # 查看当前容器
docker ps -a    # 查看所有容器
docker ps -l     #  查看最后一次创建的容器

输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。

5,查看容器内的标准输出:

docker logs 2b1b7a428627    # 2b1b7a428627容器ID
docker logs amazing_cori    # amazing_cori容器名字
docker logs -f bf08b7f2cd89
  • -f:让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

6,停止容器:

docker stop amazing_cori    # amazing_cori容器名字

7,查看指定命令的具体用法:

docker stats --help
docker exec --help

8,获取镜像:

docker pull ubuntu

9,启动一个容器:

docker start b750bbbcfd88

10,重启一个容器:

docker restart b750bbbcfd88

11,进入一个后台启动容器:

docker attach 1e560fca3906  # 使用exit退出时,容器停止
docker exec -it 243c32535da7 /bin/bash      # 使用exit退出时,容器不停止

12,导出容器:

docker export 1e560fca3906 > ubuntu.tar

13,导入容器:

cat docker/ubuntu.tar | docker import - test/ubuntu:v1
docker import http://example.com/exampleimage.tgz example/imagerepo

14,删除容器:

docker rm -f 1e560fca3906
docker rm $(docker ps -a -q)    # 移除所有的docker容器

15,运行一个webapp,以及端口映射:

docker pull training/webapp  # 载入镜像
docker run -d -P training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py
  • -P:将容器内部使用的网络端口随机映射到我们使用的主机上。
  • -p:通过这个参数来指定映射端口。

也可以指定网络地址:

docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

默认都是tcp端口,也可以绑定udp端口,可以在端口后面加上/udp:

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

16,查看容器的端口映射:

docker port bf08b7f2cd89
docker port wizardly_chandrasekhar
docker port adoring_stonebraker 5000    # 快速查看端口绑定情况

17,查看容器内部进程:

docker top wizardly_chandrasekhar

18,查看docker的底层信息:

docker inspect wizardly_chandrasekhar

19,查看本地主机上的镜像:

docker images

20,搜索镜像:

docker search httpd

21,删除镜像:

docker rmi hello-world

对于被删除的ImageID,如果存在多个REPOSITORY名字引用,删除时需要用以下命令:

docker rmi -f 38ea04e19303  # 删除该ImageID全部镜像
docker rmi 192.168.1.111/centos/centos:7.2      # 删除指定的REPOSITORY

22,创建镜像:

我们可以使用两种方式来创建新的镜像文件:
* 1、从已经创建的容器中更新镜像,并且提交这个镜像。 * 2、使用Dockerfile文件来创建一个新的镜像。

1)提交镜像:

docker commit -m="has update" -a="user" e218edb10161 user/ubuntu:v2

2)Dockerfile:

创建Dockerfile文件:

FROM    centos:6.7
MAINTAINER author "author@email.com"
RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd testuser
RUN     /bin/echo 'testuser:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
  • FROM:指定使用哪个镜像源。
  • MAINTAINER:描述作者和邮箱。
  • RUN:镜像需要执行的命令,执行之后会生成一个新的镜像,一句RUN就是一个分层。
  • EXPOSE:设置容器对外映射的容器端口。
  • CMD:CMD命令只能出现一次,如果有多次,则只有最后一次生效。

注意:Dockerfile的指令没执行一次都会在docker上新建一层,所以过多的无意义的层,会造成镜像膨胀过大。以&&符号连接命令,这样执行之后,只会创建一层镜像。

在Dockerfile文件的当前目录下执行docker build命令来构建一个镜像:

docker build -t testuser/centos:v1.0 .
  • -t:指定要创建的目标镜像名。
  • .:Dockerfile文件所在的目录,可以指定Dockerfile的绝对路径。

23,设置镜像标签:

docker tag 860c279d2fec testuser/centos:dev

24,容器互联:

1)容器命名:

当我们创建一个容器时,docker会自动对它命名。另外,我们也可以使用--name来命名容器:

docker run -d -P --name runoob training/webapp python app.py

2)新建网络:

docker network create -d bridge test-net
  • -d:指定docker网络类型,有bridge、overlay。其中overlay网络类型用于Swarm mode。

3)查看网络:

docker network ls

4)连接容器:

docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash

在容器内使用ping test1, ping test2。

25,配置DNS和国内镜像源:

在宿主机的/etc/docker/daemon.json写入下面内容:

{
"registry-mirrors": [
    "https://alzgoonw.mirror.aliyuncs.com",
    "https://rq5uyt7.mirror.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
    ],
"dns": [
    "114.114.114.114",
    "8.8.8.8"
    ]
}

设置完之后,新启动容器的DNS会自动分配上面的服务器。

查看容器的DNS是否生效:

docker run -it --rm ubuntu  cat etc/resolv.conf

26,登录和退出:

docker login
docker logout

27,推送镜像:(需要先登录)

docker tag ubuntu:18.04 username/ubuntu:18.04    # 设置镜像标签
docker image ls    # 查看本地镜像
docker push username/ubuntu:18.04    # 推送镜像到远程仓库
docker search username/ubuntu    # 搜索镜像
相关标签
回到顶部