docker入门操作
2018-03-11 本文已影响0人
AMZ小楼
Docker 安装
docker-machine是解决docker运行环境的问题,类似vmware
docker-compose 主要是解决docker容器编排问题
docker-swarm是解决多个主机多容器(docker集群)调度部署的问题,目前还不成熟,通常用k8s来管理和调度容器
参考文档:
Docker入门级简易手册
Docker官网
yum install -y yum-utils device-mapper-persistent-data lvm2 curl
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
yum list docker-ce --showduplicates | sort -r
配置加速器
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{ "registry-mirrors" : [
"https://i3jtbyvy.mirror.aliyuncs.com"
],
"debug" : true,
"experimental" : true
}
EOF
systemctl restart docker
仓库 镜像 容器的区别
注册服务器(repository),仓库(registry),镜像(image),容器(container)之间的关系:注册服务器主要是用来存放仓库的服务器,在一个服务器上有多个仓库,而仓库又可以分为公共仓库和私有仓库,一个仓库里面有可以有多个镜像,而容器则是镜像的一个实例
运行一个名字为C1的容器
Docker run -it --name=c1 镜像名称 /bin/bash
退出
Ctrl+p+q
查看正在运行的容器
Docker ps
Docker ps -a
停止容器
Docker stop CONTAINER ID
删除容器,先停止再删除
Docker rm CONTAINER ID
查看日志
Docker log nginx
日志重定向
Docker log nginx > nginxaccess.log
从仓库中拉去一个镜像
Docker pull nginx
查看镜像
Docker images
启动一个镜像指定映射端口
Docker run -itd --name nginx -p 80:80 docker.io.nginx
验证
Curl -I localhost:80
查看端口映射关系
Docker port nginx
删除镜像文件
Docker rmi IMAGE ID
查看网络情况
Ip addr show
Docker network ls
Ifconfig docker0
查看网络中有哪些容器实例
Docker network inspect bridge
搭建私有仓库
创建目录 Dockerfile
创建文件 requirements.txt cat app.py
编译镜像 docker build -t kel/python .
再进行push到私有仓库的时候,必须打tag 标记相关的ip和端口
docker tag kel/python 47.93.8.80:5000/python
docker search registry
docker pull registry:2.6
docker run -d -p 5000:5000 -v /var/lib/registry:/var/lib/registry registry:2.6
-v 挂载一个数据卷
默认情况下,会将仓库存放于容器内的/var/lib/registry(官网Dockerfile中查看)目录下。
这样如果容器被删除,则存放于容器中的镜像也会丢失。
所以我们一般情况下会指定本地一个目录挂载到容器内的/var/lib/registry下,如下:
docker run -d -ti --restart always --name docker-hub -p 5000:5000 -v /docker-hub/registry:/var/lib/registry registry
更改文件cat /etc/docker/daemon.json
{
"insecure-registries":[
"47.93.8.80:5000",
"127.0.0.1:5000"
]
}
重启systemctl restart docker.service
image.png
docker push 47.93.8.80:5000/python
访问私有仓库
curl -XGET 47.93.8.80:5000/v2/_catalog
image.png
docker run -p ip:hostPort:containerPort redis
启动
docker run -itd --name python_v1 -p 4000:80 kel/python /bin/bash
如果没有/bin/bash 一创建就会退出
Docker 连接两个容器
docker pull redis:3
docker run -itd --name redis -p 6379:6379 3859b0a6622a
docker build -t kel/app .
docker run -itd --name app_V1 --link redis:redis -p 80:80 93ef8e7cc05b
--link表示为tagname:alias,一个是标签的名称,一个是别名
容器间的访问时通过内部网络进行的
docker network inspect bridge
image.png
进入一个容器
docker exec -it 58a178220dd9 /bin/bash
查看存储驱动ocker info | grep "Storage Driver"
Storage Driver: overlay2
查看日志
docker logs -f 58a178220dd9
查看cpu使用状态
docker status redis
查看内部运行的进程
Docker top redis
查看容器所有信息
Docker inspect 容器id
不进入容器执行命令
docker exec app_V1 ps -ef
RUN一般用来在容器中安装相关的依赖
CMD 主要用来执行命令,推荐使用exec方式,就是["/bin/sh","-c","echo 123"],
第一个参数表示为可执行文件,后面的全部是参数。
创建自定义网络互相通信
docker network create --driver=bridge harry
创建容器
docker run -itd --name web3 --network=harry httpd:2.4
docker run -itd --name web4 --network=harry httpd:2.4
在相同的网络中通过主机名来通信
docker exec -it 625ddc37ff7f bash
ping web3
更容器的网络docker network connect harry 8aa9e8e1dd2e
Docker port name(查看映射端口)
查看某一个容器的所有信息
image.png
docker持久化管理之bind
启动nginx
docker run -itd --name nginx_0 -p 81:80 nginx:1.12-alpine
挂载文件
docker run -itd -p 83:80 -v /root/index.html:/usr/share/nginx/html/index.html nginx:1.13
查看文件
docker exec 8ebc78dbcd37 cat /usr/share/nginx/html/index.html
修改外部配置会立即生效
image.png
挂载的时候可以修改名字
docker run -itd -v /root/index.html:/usr/share/nginx/html/kel.html -p 80:80 nginx
docker run -itd -v /root/:/mnt/kel -p 80:80 nginx(挂载的时候,当容器不存在这个目录的时候,那么会创建这个目录)
docker持久化管理之volume
创建一个数据卷管理容器
docker run -itd -p 84:80 -v /usr/share/nginx/html nginx:1.13
image.png
拷贝文件
docker cp /root/index.html 62d59346b0b0:/usr/share/nginx/html/
强制删除容器
docker rm -f 62d59346b0b0
查看镜像构建的步骤
docker history redis:3
docker run -itd -v kel:/data redis(给卷指定名称)
docker run -itd redis(使用匿名卷)
有状态和无状态
微服务中,推荐的是就是无状态的服务,而有些应用必须有状态,无状态基本上是指删除这个容器之后,再新建一个,可以正常的服务,而有状态则不行,需要加载相关的数据。在镜像中,nginx差不多就是无状态的,日志无所谓;而redis相当于是有状态的,因为rdb文件需要保存(这就是为啥在构建redis镜像的时候使用VOLUME指令来创建挂载的卷)。
`