docker使用
1、安装(ubuntu环境下)
sudo apt-get remove docker docker-engine docker-ce docker.io sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install -y docker-ce
验证是否安装成功
systemctl status docker
如果尚未启动,则执行如下命令启动:
sudo systemctl start docker
2、常用操作
镜像操作
docker search 关键字 docker pull 镜像名称 docker pull 镜像名称:版本 //在https://hub.docker.com/上可以查询镜像和版本信息 docker pull mysql //拉取mysql镜像,默认是最新版本,docker pull mysql:5.5 拉取特定版本mysql docker images //查看所有本地镜像 docker rmi image-id //删除指定镜像,image-id为镜像id
容器操作
docker run --name mytomcat -d tomcat:latest //根据镜像启动容器 docker ps //查看运行的容器 docker stop 容器id //停止运行中的容器 docker ps -a //查看所有的容器,包括已经停止的 docker start 容器id //启动容器 docker rm 容器id //删除容器 docker run -d -p 8888:8080 tomcat // -d后台运行 -p将主机端口映射到容器端口 docker run -d -p 8889:8080 tomcat //也可启动多个 docker run -d -p 8890:8080 tomcat
3、使用代理
由于众所周知的原因,国内对国外网络访问非常不友好,很多时候从hub.docker.com上拉取仓库会连接超时,这种情况下就需要配置代理了
配置代理的方式:
修改如下文件:
ubuntu: /etc/default/docker
centos: /etc/sysconfig/docker
在文件中增加以下内容:
HTTP_PROXY="http://[proxy-addr]:[proxy-port]/" HTTPS_PROXY="https://[proxy-addr]:[proxy-port]/" export HTTP_PROXY HTTPS_PROXY
将proxy-addr,proxy-port改成实际代理的名称
然后重启docker服务即可。
systemctl enable docker; systemctl daemon-reload ; systemctl restart docker
4、使用镜像
国内也很多docker镜像服务,docker官方也有国内的镜像,使用镜像的方法就是:
直接修改:/usr/lib/systemd/system/docker.service文件,在ExecStart中加入--registry-mirror=https://registry.docker-cn.com
保存文件,重启docker服务即可
systemctl enable docker; systemctl daemon-reload ; systemctl restart docker
5、搭建私有仓库
往往我们会将一些服务打包成镜像,这种服务具有私有性,不方便放在hub.docker上,这个时候就需要搭建私有仓库
基于docker原生私有仓库镜像搭建私有仓库:
docker pull registry docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
-v /opt/registry:/var/lib/registry 表示将本地目录/opt/registry映射到仓库容器中的/var/lib/registry目录,该目录中存储仓库中的镜像文件
仓库跑起来后,就可以向私有仓库推送镜像了,如推送自定义的ubuntu镜像:
docker tag ubuntu localhost:5000/my-ubuntu //打包私有镜像,貌似前面那段localhost:5000如果符合url格式,会在push的时候自动识别为url,否则会以docker.io作为url docker push localhost:5000/my-ubuntu
从私有仓库查询镜像, 用docker search不管用,需要用下面这个:
curl -XGET http://localhost:5000/v2/_catalog
从私有仓库拉取镜像:
docker pull localhost:5000/my-ubuntu
更多内容,关于如何设置访问权限,如何提供可视化界面,可参考:https://www.cnblogs.com/jaazz/p/9334183.html
6、制作自定义镜像
基于修改的容器创建镜像
通过docker commit将修改的容器提交为镜像
docker commit [容器名称] [镜像名称]:版本
如从修改的容器test-centos1生成镜像:centos_sshd:7.0
docker commit test-centos1 centos_sshd:7.0
当然,可以进行一些附加选项,如指定容器开放的端口,指定要执行的命令:
CMD:要执行的命令
EXPOSE:需要开放的端口
--change和-c是一样的,详细可docker commit --help查看帮助
docker commit --change='CMD ["/auto_sshd.sh"]' -c "EXPOSE 22" test-centos1 centos_sshd:7.0
利用Dockerfile创建镜像
编写Dockerfile文件,如下是一个例子:
# The dockerfile has Change add sshd services on Centos7.0 #centos7:latest image FROM centos:latest MAINTAINER Yifeng,http://www.cnblogs.com/hanyifeng #Install sshd net-tools RUN yum install openssh-server net-tools -y RUN mkdir /var/run/sshd #Set password for root RUN echo 'root:iloveworld' | chpasswd RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config #Set history record ENV HISTTIMEFORMAT "%F %T " #Fix sshd service:Read from socket failed: Connection reset by peer? RUN ssh-keygen -A #Change timezone CST RUN \cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #Open 22 port EXPOSE 22 #Auto running sshd service CMD ["/usr/sbin/sshd","-D"]
上述文件内容就是一个dockerfile 常见的命令组合。开头带#号的为注释
文件解释:
FROM: 必不可少的命令,从某个镜像作为基。如 FROM <image_name> ,或者 FROM <image_name>:<tag>. 如果不加tag,默认为latest。先从本地镜像仓库去搜索基镜像,如过本地没有,在去网上docker registry去寻找。
MAINTAINER:标明该Dockerfile作者及联系方式,可忽略不写
RUN:建立新的镜像时,可以执行在系统里的命令,如安装特定的软件以及设置环境变量。
ENV:设置系统环境变量(注意:写在/etc/profile里的命令在dockerfile这里会不生效,所以为改成ENV的方式)
EXPOSE:开放容器内的端口,但不和宿主机进行映射。方便在宿主机上进行开发测试。(如需映射到宿主机端口,可在运行容器时使用 -p host_port:container_port)
CMD:设置执行的命令,经常用于容器启动时指定的某个操作。如执行自定义脚本服务,或者是执行系统命令。CMD 只能存在一条,如在Dockerfile中有多条CMD的话,只有最后一条CMD生效!
使用docker build命令来创建镜像:
docker build -t centos_sshd_1 .
-t 选项来docker build新的镜像以便于标记构建的镜像,. 表示当前目录,也可以指定dockerfile 文件所在目录。
镜像构建完毕后,即可通过docker images命令查看到。