一、镜像常用命令

docker images    // 查看镜像
docker search    文件名    //搜索镜像
docker   pull   文件名     //下载镜像
docker  push   [OPTIONS]  NAME [:TAG]    //上传镜像
docker load  <文件名.tar  //导入镜像文件(格式为.tar) 例:docker   load  <nginx.tar
docker save image_name  > xx.tar   //导出镜像包,镜像名可以是 docker images 查看REPOSITORY下面名字

docker run   -it   镜像名称:镜像标签  启动命令   //启动运行镜像 例如:docker run -it night:night01 bash

docker  tag //修改镜像名称和标签
docker inspect  镜像名称:镜像标签  //获取容器/镜像的元数据。主要查看CMD后面的命令
“Cmd":[
	"/bin/sh",
	"-c",
	"#(nop)",
	"CMD[\"Nginx\"\"-g\"\"daemon off;\"]"

docker ps   //查看已开启的容器加 -a  查看所有容器
docker history  镜像名   //查看镜像制作历史
docker   rmi    镜像名  //删除本地镜像
docker save  镜像名 > 文件名.tar   //镜像另存为tar包

二、容器常用命令
–后面加容器ID

docker run //运行容器

//-i交互式 -t终端 -d后台进程

//注意:启用一个有交互式的进程又要放后台进程用-itd , 单纯无交互放后台直接-d即可

docker ps //查看容器列表 没加-a表示正在运行的容器 加-a查看所有容器 -q查看ID号

docker stop //关闭容器

    [root@docker_1 docker]# docker stop $(docker ps -q) //停用全部运行中的容器

docker start //启动容器

docker restart //重启容器

docker attach|exec //进入容器 退出挂后台要用CTRL+P+Q

docker inspect //查看容器底层信息 常用于查看服务IP和端口

docker top //查看容器进程列表 相当于在容器里执行ps查看这个容器的进程

        //容器的进程在运行它的物理机上可以查看到,隔离性没有KVM那么好

docker rm //删除容器

    [root@docker_1 docker]# docker rm $(docker ps -qa)  //删除所有容器

	[root@docker_1 docker]# docker stop $(docker ps -q) & docker rm $(docker ps -aq)

docker exec -it  容器ID  //进入容器 建议用这个连接容器,exit退出后

	[root@docker_1 docker]# docker exec -it 19c535ae17b3 bash //要加命令

	[root@docker_1 ~]# docker run -d -p 80:80 nginx  

	//绑定物理机端口,让外网可以访问容器,

	// 前面端口是物理机,后面是容器

三、镜像制作
1)手动修改镜创建镜像

-docker commit 镜像ID 新镜像名称:新镜像标签

先启动一个镜像,再编缉修改好后,用commit命令制作新镜像,可以再导出镜像备用

[root@docker_1 test]# docker exec -it 2ce7c487b29d bash

[root@2ce7c487b29d bin]#  //部署好自己想要的软件服务

[root@docker_1 test]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES
2ce7c487b29d        centos_lcf:ww       "/bin/sh -c 'sh /bin/"   About an hour ago   Up About an hour    0.0.0.0:80->80/tcp, 0.0.0.0:1120->22/tcp   happy_ride
[root@docker_1 test]# docker commit 2ce7c487b29d myos:myos

sha256:e51e0bf50e22fe712b9eea31583a83ac08749a0e55b48a000ff78a8c1129e2f8

2)docker脚本创建镜像

-docker build -t   镜像:标签 dcocker脚本路径

//注意问题:如果配置文件写错或不规范会导致创建失败,

//这时可能镜像也有了,但名字变成了<none>,解决办法还是检查docker脚本

Dockerfile

• Dockerfile语法格式
– FROM:基础镜像   //docker image 查看填写要做用的样版镜像
– MAINTAINER:镜像创建者信息   //可选项
– EXPOSE:开放的端口   //要打开哪个端口
– ENV:设置变量     //像systemctl的,可查看/usr/lib/systemd/system下*.service文件项
– ADD:复制文件到镜像  //必须存放在和Dockerfile文件同一目录下
– RUN:制作镜像时执行的命令,可以有多个 
– WORKDIR:定义容器默认工作目录  //相当于cd到哪个目录下
– CMD:容器启动时执行的命令,仅可以有一条CMD

--示例:

//自动安装httpd ssh服务 并默认启动服务,这里启用两个服务,可用脚本运行

//记得多服务时,只留一个不在后台运行,运行后台的加上&

[root@docker_1 test]# cat Dockerfile 

FROM centos_lcf:latest
RUN yum -y install openssh-server.x86_64 httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
ENV EnvironmentFile=/etc/sysconfig/sshd
RUN /usr/sbin/sshd-keygen
RUN echo "1" | passwd --stdin root
WORKDIR /var/www/html
RUN echo "hello aaaaaaaaaaa" >index.html
EXPOSE 80
EXPOSE 22
WORKDIR /bin
RUN echo  "#!/bin/bash" >ngssh
RUN echo  "/usr/sbin/sshd -D & " >>ngssh
RUN echo  "/usr/sbin/httpd -DFOREGROUND" >>ngssh
RUN chmod 777 ngssh
CMD sh /bin/ngssh

–写好docker脚本后开始制作

[root@docker_1 test]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myos                myos                e51e0bf50e22        20 minutes ago      382 MB
centos_lcf          latest              c6fac7560757        8 hours ago         326.1 MB

[root@docker_1 test]# docker build -t myhttp:myhttp .   //这里.是指当前目录

Successfully built 470176bc952d
[root@docker_1 test]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myos                myos                e51e0bf50e22        22 minutes ago      382 MB
myhttp              myhttp              470176bc952d        About an hour ago   381.9 MB
centos_lcf          latest              c6fac7560757        8 hours ago         326.1 MB

[root@docker_1 test]# docker run -itd -p 90:80 -p 1190:22 myhttp:myhttp  //创建容器测试
6ede4e8a4dc8310a336e36c26c2f3c740e72113950c3e2427072571dd2c56336
[root@docker_1 test]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              			 PORTS                                      NAMES
6ede4e8a4dc8        myhttp:myhttp       "/bin/sh -c 'sh /bin/"   8 minutes ago       Up 8 minutes        		0.0.0.0:1190->22/tcp, 0.0.0.0:90->80/tcp   infallible_carson  //显示出来基本就创建成功了,	结果就是测试

//在另一台机上用ssh -p 1190 ip 连接,http://IP:90 测试

—镜像仓库制作和使用

本地局域网docker仓库

//注:重启服务后,要启动仓库镜像,其它客户机才能访问

//      默认传输使用https,可以写个配置文件不使用ssl

1) 服务端

[root@docker_1 ~]# vi /etc/docker/da.json   //建立这个配置文件

{
 "insecure-registries":["192.168.1.10:5000"]             
}

[root@docker_1 ~]# systemctl restart docker.service

//上面服务端

补充:debian 系统 dpkg apt-get  相当于redhat rpm yum

----常见错误

1) Docker创建容器时报错 WARNING: IPv4 forwarding is disabled. Networking will not work.

 解决方法:是要在本机上开通路由功能

[root@docker_1 docker]# vi /usr/lib/sysctl.d/00-system.conf 

net.ipv4.ip_forward=1    //添加这一行,开通路由转发功能就可以了

[root@docker_1 docker]# systemctl restart network