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命令查看到。

 

posted @ 2019-12-10 19:57  绿色冰点  Views(472)  Comments(0Edit  收藏  举报