docker介绍
作者:向前的步伐 / 发表: 2020年1月31日 18:07 / 更新: 2020年1月31日 18:07 / docker / 阅读量:532
一、简介
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 # 搜索镜像