docker基本操作

一、容器技术的核心有以下几个内核技术组成

  -Cgroups ( Control Groups)-资源管理

  - NameSpace-进程隔离
  - SELinux安全
二、docker镜像命令

docker help #查看 帮助
docker search   nginx #查找官方镜像
docker images   #查看本地镜像
docker pull  nginx      #上传镜像
docker  push    nginx   #下拉镜像
docker rmi docker.io/nginx #删除镜像
docker history #查看镜像制作历史
docker inspect #查看镜像底层信息
docker rmi #删除本地镜像
docker save #镜像另存为tar包
docker load #使用tar包导入镜像
docker search #搜索镜像
docker tag #修改镜像名称和标签


 三、将本地镜像保存为tar包

docker save docker.io/busybox:latest -o   busybox.tar    #打包
docker load -i busybox.tar                               #解包

 四、重命名  

docker tag docker.io/centos:latest cen:v1             #tag标签(重命名)

五、容器常用命令

docker run                #运行容器
docker ps                 #查看容器列表
docker stop               #关闭容器
docker start              #启动容器
docker restart            #重启容器
docker attach[exec        #进入容器
docker inspect            #查看容器底层信息
docker top                #查看容器进程列表
docker rm                 #删除容器
             

 六、启动docker容器

docker run -idt docker.io/centos:latest /bin/bash     #启动容器 
docker ps #查看正在运行的容器
docker ps -a #查看所有容器列表
docker ps-aq #仅显示容器id

 七、容器管理(用容器ID就可以)

docker stop                   #关闭容器  
docker start                  #开启容器
docker restart                #重启容器

docker attach #进入容器,exit会导致容器关闭
docker exec #进入容器,退出时不会关闭容器

 八、dockerfile文件创建新的镜像

(一)语法

Dockerfile语法格式:

– FROM:基础镜像

– MAINTAINER:镜像创建者信息(说明)

– EXPOSE:开放的端口

– ENV:设置环境变量

– ADD:复制文件到镜像

– RUN:制作镜像时执行的命令,可以有多个(创建镜像时启用)

– WORKDIR:定义容器默认工作目录  (相当于CD命令)

– CMD:容器启动时执行的命令,仅可以有一条CMD(启用镜像时启动,比如服务一类的)

 (二)操作

1.创建httpd

[root@docker1 ~]# mkdir bulid
[root@docker1 ~]# cd bulid
[root@docker1 bulid]# touch Dockerfile    #Dockerfile文件第一个字母要大写
[root@docker1 bulid]# cp /etc/yum.repos.d/local.repo  ./
[root@docker1 bulid]# vi Dockerfile
FROM  docker.io/myos:latest           
RUN yum -y install httpd
ENV EnvironmentFile=/etc/sysconfig/httpd
WORKDIR /var/www/html/            #定义容器默认工作目录
ADD index.html index.html
EXPOSE 80                #设置开放端口号
EXPOST 443
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]       #开机自动启动httpd(默认启动命令,默认启动的就是上帝进程和systemctl是一样的)
[root@docker1 bulid]# docker build -t docker.io/myos:http .   #构建镜像(docker.io/myos:http为标签 可加可不加)

2.创建ssh

再如果不知道怎么构建镜像的命令时可以先进入容器中安装命令一遍

1.docker run -it myos : latest
2.yum provides sshd   #查看ssh是哪个包的服务
    openssh- server- 7 .4p1-16.el7.x86_64
    yum install -y openssh- server
3.因为没有systemctl在启动服务的时候就要手动启动
    rpm -ql openssh -server  #查看服务的安装位置
    /usr/lib/systemd/ system/sshd. service #查看这个文件 

 

$OPtions 这个参数可以再上面的的脚本文件中查看是否存在或者echo $OPtions 查看时候有这个输出。如果没有就不用了管这个参数

在查看 yum provides /etc/rc.d/init.d/functions 是那么包 装上这个包之后 配置秘钥  设置root密码(ssh  需要 用户名 密码)

 在容器安装之后的操作

粘贴到dockerfile中删除其中的不必要的操作(下面是删除之后的dockerfile的全部数据)

之后就可以直接构建项目了

九、容器目录和本机目录共享(nfs)

 mount -t nfs 192.168.1.254:/content /mnt/qq
 docker run  -d -p 80:80 -v /mnt/qq:/usr/share/nginx/html -it 192.168.1.10:5000/docker.io/myos:http         #-p  映射端口   -v 映射目录 (前面是本地目录,后面是容器目录)

 十、自定义网桥

docker  network   create  --subnet=10.10.10.0/24  docker1  #创建一个10网段的网桥
 [root@docker1 ~]# docker  network   inspect   docker1
[
    {
        "Name": "docker1",
        "Id": "b447cacc0373631ff7c534f119047946be5c1498b5b2e31a31180c5ee6320ab5",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "10.10.10.0/24"
                }            ]
        },
        "Internal": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
docker  run  --network=docker1   -itd   docker.io/myos   #启动容器时指定网桥(达到一个网络隔离的作用)

 十一、创建自定义仓库

1、定义一个私有仓库(服务端)

    [root@docker1 bulid]# yum install docker-distribution
    [root@docker1 bulid]# systemctl start docker-distribution
    [root@docker1 bulid]# systemctl enable docker-distribution
  仓库配置文件及数据存储路径
  -/etc/docker-distribution/registry/config.yml
  - /var/lib/registry [root@docker1 ~]# docker tag docker.io/busybox:latest 192.168.1.31:5000/docker.io/busybox:latest #打标签 (192.168.1.31:5000位服务端的ip地址端口) [root@docker1 ~]# docker push 192.168.1.31:5000/docker.io/busybox:latest #上传 [root@docker1 ~]# docker tag docker.io/myos:http 192.168.1.31:5000/ docker.io/myos:http [root@docker1 ~]# docker push 192.168.1.31:5000/docker.io/myos:http 2.客户端配置 [root@docker2 ~]# vim /etc/sysconfig/docker INSECURE_REGISTRY='--insecure-registry docker服务端ip:5000' #允许非加密方式访问仓库 ADD_REGISTRY='--add-registry docker服务端i:5000' #docker 仓库地址 [root@docker2 ~]# systemctl restart docker [root@docker2 ~]# docker run -it myos:http /bin/bash    #直接启动

3.查看里面有什么镜像

  [root@docker1 bulid]# curl http://docker1:5000/v2/_catalog

  {"repositories":["docker.io/busybox","docker.io/myos"]}

4.查看里面的镜像标签

  [root@docker1 bulid]# curl http://docker1:5000/v2/docker.io/busybox/tags/list

  {"name":"docker.io/busybox","tags":["latest"]}

  [root@docker1 bulid]# curl http://192.168.1.31:5000/v2/docker.io/myos/tags/list

  {"name":"docker.io/myos","tags":["http"]}

原文地址:https://www.cnblogs.com/zshBlos/p/14242792.html