1.docker架构
docker架构主要由以下几部分组成:
1.Client,docker 客户端,执行docker命令
2.DOCKER_HOST,docker 服务端,服务端主要包括容器和镜像,并且需要监听在某个套接字上。客户端和服务器端的连接如果使用http默认必须使用https协议,如果需要使用http协议需要明确定义。
3.Registry,镜像仓库,docker服务端的镜像来源,默认连接是https,如果需要使用http协议需要明确定义。默认使用的仓库为hub.docker.com,也可以建立私有仓库。每个registry都有不同的仓库,如:ngxin仓库,tomcat仓库,busybox仓库等。每个仓库中又存在每个镜像的不同版本(标签:tag),如:nginx:1.1,nginx1.2,nginx1.3等等。
docker分为企业版和社区版,其中企业版的包名为:docker-ee,社区版的为docker-ce
接下来让我们开始使用docker吧。
1.下载最新的docker yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce.x86_64
docker的配置文件在 /etc/docker/daemon.json,是一个json格式的配置文件,默认是不存在的,需要自己创建。
docker默认的镜像仓库在国外,所以在国内使用建议先添加一个镜像加速器。这里使用阿里云的,代码如下:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6rdyvtbt.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
使用如下命令如果返回我们上部一添加的url则说明加速域创建成功
[root@localhost ~]# docker info|grep -A 1 'Registry Mirrors'
Registry Mirrors:
https://6rdyvtbt.mirror.aliyuncs.com/
docker常用命令如下(docker启动后才能使用):
docker version #查看docker版本信息
docker info #查看docker详细信息
docker search #在docker仓库中查找相关镜像
docker pull #推送一个镜像到远程仓库
docker images #列出所有本地镜像
docker create #创建一个docker容器
docker start #启动一个容器
docker run #创建并启动一个容器
docker attach #
docker ps #列出运行中的同期
docker logs #查看相关容器的日志
docker restart #重启一个容器
docker stop #停止一个容器
docker kill #停止一个容器
docker rm #删除一个镜像
让我们来搜索一个nginx镜像:
[root@localhost ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 11049 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1555 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 688 [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as p… 492 [OK]
我们可以看到第一个nginx是顶格写的,表示他是顶级仓库中的镜像,有分隔符的则是该dockerhub.com注册用户的镜像。查找完就可以下载镜像了,使用命令:
[root@localhost ~]# docker image pull nginx:1.14-alpine
1.14-alpine: Pulling from library/nginx
8e402f1a9c57: Pull complete
c797cfb922b7: Pull complete
b691d0a030cb: Pull complete
401ca65c99ae: Pull complete
Digest: sha256:b67e90a1d8088f0e205c77c793c271524773a6de163fb3855b1c1bedf979da7d
Status: Downloaded newer image for nginx:1.14-alpine
下载一个nginx镜像,如果后面不跟版本号默认下载tag为latest的版本,如果需要下载指定的版本,可以登录到dockerhub.com找到nginx后查看tag标签里面的版本信息。这里下载nginx:1.14-alpine的版本,下载完毕后使用以下命令查看下载的镜像:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.14-alpine cafef9fe265b 3 days ago 16MB
删除一个镜像文件如下:
[root@localhost ~]# docker image rm nginx:1.14-alpine
Untagged: nginx:1.14-alpine
Untagged: nginx@sha256:b67e90a1d8088f0e205c77c793c271524773a6de163fb3855b1c1bedf979da7d
Deleted: sha256:cafef9fe265b4b5555ba35cc346cd59ac8666223198ec72d657b2033e5b6d51f
Deleted: sha256:e559ec1e768857703cbb1cdfa0377d2007c7b71423b88d4f757261cf5382322e
Deleted: sha256:3ab9f17bd15d634d84a02bf8c7c539886e43bb87511ab0ec9703c163e8ae4f4d
Deleted: sha256:6874590135827cec2b5f81187420457e976f08bddf956367815c30b88017ab3b
Deleted: sha256:bcf2f368fe234217249e00ad9d762d8f1a3156d60c442ed92079fa5b120634a1
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 881bd08c0b08 6 days ago 109MB
busybox latest d8233ab899d4 3 weeks ago 1.2MB
再次查看,已经没有该镜像了。
接下来,让我们创建第一个docker容器吧
[root@localhost ~]# docker run --name b1 -it busybox:latest
run:表示运行一个容器,如果本地没有该镜像,会自动去下载。
--name:表示容器的名称,容器的名称是唯一的。
-it:表示启动交互式接口。
busybox:latest:表示镜像名字。
接下来查看一个容器运行的情况:
[root@localhost ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b5a37667a778 busybox:latest "sh" 7 seconds ago Up 7 seconds b1
CONTAINER ID :容器的ID,唯一
IMAGE:该容器运行的镜像名称
COMMAND:该容器运行的命令
CREATED:容器创建时间
STATUS:容器状态
PORTS:暴漏的端口号
NAMES:容器名字
因为该容器运行的是一个busybox,是一个shell的交互式接口,所以退出shell,容器就自动结束了,可以使用
[root@localhost ~]# docker start -ai b1
/ #
可以使用 docker stop或docker kill停止一个容器
删除一个容器使用:docker rm
总结(以运行一个nginx为例):
1.拉取一个镜像
docker pull nginx:1.14-alpine
2.创建一个容器
docker create --name web1 nginx:1.14-alpine
3.启动一个容器
docker start web1
以上三条命令可以合成一条:
docker run --name web1 -d nginx:1.14-alpine
docker run会自动去拉取本地没有的镜像,并创建启动这个容器
4.停止一个容器
docker stop web1
5.删除一个容器
docker rm web1 或 docker container rm web1
6.删除一个镜像
docker rmi nginx:1.14-alpine 或 docker image rm nginx:1.14-alpine
以上就完成了一个docker的基本生命周期。
注:第5、6步前一个是老的命令格式,后一种是新的命令格式,建议使用新的命令格式
附图一张,容器的状态转换:
转载于:https://blog.51cto.com/lidefu/2361367