美文网首页
docker的安装和配置

docker的安装和配置

作者: 上帝爱睡觉_d0a7 | 来源:发表于2019-08-29 10:31 被阅读0次

    一、注意事项

    (一)关于文章内容

    • 命令行中()表示可选参数; <>表示变量
    • 配置文件均放在了/home/<user>/.docker/
    • 其他放在volume和其他位置

    (二)几个目录

    <volume>=/var/lib/docker/volumes/<volume> 
    <dst>=/var/lib/<dst>
    

    (三)创建容器后排错

    # 查看卷有没有创建
    $ docker volume ls
    
    # 查看库是否创建
    $ ls /var/lib/docker/volums/<volume>/_data/
    
    # 查看日志
    $ docker logs <container>
    
    # 查看绑定的端口
    $ docker ps
    

    二、docker相关官方网站

    • Docker Hub

    https://hub.docker.com

    • Docker Hub

    https://hub.docker.com

    • Docker Doc

    https://docs.docker.com](https://docs.docker.com/)

    • 镜像

    https://hub.docker.com/explore

    三、基础配置

    (一)配置docker镜像下载仓库地址

    1、编辑deamon.json

    $ vi /etc/docker/deamon.json
    
    {
      "registry-missors": ["https://registry.docker-cn.com"]
    }
    

    2、重启docker

    $ systemctl restart docker
    

    四、命令行

    (一)镜像(images)

    1、删除镜像

    # 删除某个
    $ docker rmi <image>
    # 删除所有
    $ docker rmi $(docker images -q)
    

    (二)容器(container)

    常用

    1、创建容器

    # -i 交互式 -t 分配一个伪终端 -d 运行容器到后台
    $ docker container run -itd - <container> <image>
    

    2、删除容器

    # 删除某个容器
    $ docker rm -f <container-name>
    $ docker volume rm <volume-name>
    # 删除所有容器
    $ docker rm -f $(docker ps -q -a)
    $ docker volume rm -f $(docker volume ls)
    

    3、进入容器的伪终端

    $ docker exec -it <container-name> bash
    

    4、查看所有容器

    # 只看id
    $ docker ps -q -a
    # 查看所有信息
    $ docker ps -a
    

    5、启动容器

    $ docker container start <container-name>
    

    6、查看当前运行的容器

    $ docker ps
    
    $ docker container ls
    

    7、进入容器

    $ docker container attach <container-name>
    

    8、拷贝文件到容器(不推荐使用)

    $ docker container cp <file> <container-name>:<path>
    
    $ docker container cp <container-name>:<path> <file>
    

    (三)卷(volumes)

    1、创建volume

    $ docker volume create <volume>
    

    2、列出所有volume

    $ docker volume ls
    

    3、查看某个volume

    $ docker volume inspect <volume>
    

    4、挂载volume到container

    $ docker run -idt - <container> --mount src=<volume>,dst=<dst> <image>
    

    5、清理

    $ docker container stop <container>
    $ docker container rm <container>
    $ docker volume rm <volume>
    

    6、验证绑定

    $ docker inspect <container>
    

    7、查看挂载目录

    # 容器的
    $ docker inspect --format "{{.Config.Volumes}}" <container>
    
    # 宿主机的
    $ docker inspect -f "{{.Mounts}}" <container>
    

    (四)快速清理容器和卷

    # 单个 例如 删除con-mysql 则 con=mysql
    # $con="mysql"
    $ con="nginx" \
    && docker container stop "con-"$con \
    && docker container rm "con-"$con \
    && docker volume rm "vol-"$con
    
    # 所有
    $ docker container stop $(docker ps -q -a) \
    && docker container rm $(docker ps -q -a) \
    && docker volume rm $(docker volume ls)
    
    # 出现volume正在使用的话
    $ sudo service docker stop 
    $ rm -rf /var/lib/docker/volumes/<volume>
    $ sudo service docker start
    

    五、Dockerfile

    (一) Dockerfile的指令

    1、FROM

    构建的新镜像基于哪个镜像

    # <image> centos:7 ubuntu:16.04
    FROM <image>
    

    2、MAINTAINER

    镜像维护者姓名或邮箱地址

    MAINTAINER <name>
    

    3、RUN

    构建镜像时运行的shell命令

    # centos
    RUN ["yum", "install", "httpd"]
    # or
    RUN yum install httpd
    # ubuntu
    RUN ["apt-get", "install", "httpd"]
    # or
    RUN apt-get install httpd
    

    4、CMD

    运行容器时执行的shell命令

    CMD ["/usr/sbin/sshd", "-D"]
    CMD /usr/sbin/sshd -D
    

    5、EXPOSE

    申明容器运行服务的端口

    EXPOSE <port>
    

    6、ENV

    设置容器内环境变量

    ENV MYSQL_ROOT_PASSWORD 123456
    

    7、ADD

    拷贝文件或者目录到镜像, 如果时URL或压缩包会自动下载或者解压

    ADD <src> <dst>
    ADD ["<src>", "<dst>"]
    ADD https://xxx.xxx.xx/file.tar.gz /tmp/ # 不推荐
    ADD /file.tar.gz /var/www/html
    

    8、COPY

    在宿主机和容器之间拷贝文件

    COPY <src> <dst>
    

    9、ENTRYPOINT

    运行容器时执行的shell命令

    可以将CMD的命令作为参数执行

    ENTRYPOINT ["/bin/bash", "-c", "./start.sh"]
    ENTRYPOINT /bin/bash -c ./start.sh
    

    10、VOLUME

    指定容器挂载点到宿主机自动生成的目录或其他容器

    # 略
    

    11、USER

    为RUN、CMD、ENTRYPOINT执行命令指定运行用户

    USER <user>[:<group>]
    # or
    USER <UID>[:GID]
    

    12、WORKDIR

    为RUN、CMD、ENTRYPOINT、COPY设置进入容器时默认的工作目录

    WORKDIR /home/workspace
    

    13、HEALTHCHECK

    健康检查

    # 略
    

    14、ARG

    构建镜像时指定一些参数

    FROM centos:7
    ARG user #ARG user=root
    USER $user
    ...
    # docker build --build-arg user=<user> <Dockerfile>
    

    (二)Build镜像命令

    # OPTIONS:
    # -t, --tag list        #镜像名称
    # -f, --file string #指定Dockerfile文件位置
    $ docker image build [OPTIONS] PATH | URL | -
    # 例如
    $ docker build .
    $ docker build -t <image> .
    $ docker build -t <image>:<tag> . -f <Dockerfile> <context-path>
    

    (三)部署过程

    1、自定义网络

    $ docker network create <network>
    

    2、创建所需容器A

    $ docker run -itd \
    --name <container-a> \
    --net <network> \
    -p <host-port>:<container-port> \
    --mount type=bind,src=<volume>,dst=<dst> \
    <image-a>:<tag-a>
    

    3、创建所需容器B

    # 略
    

    六、docker镜像仓库

    (一)搭建私有镜像仓库

    1、下载registry镜像并启动

    $ docker pull registry
    $ docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always - registry registry
    

    2、查看镜像仓库中所有镜像

    $ curl http://<remote-host>:5000/v2/_catalog
    

    3、配置私有仓库信任

    $ vi /etc/docker/daemon.json
    
    {
      "insecure-registries":["<remote-host>:5000"]
    }
    
    $ systemctl restart docker
    

    4、打标签

    $ docker tag <image> <remote-host>:5000/<image>:<tag>
    

    5、上传

    $ docker push <remote-host>:5000/<image>:<tag>
    
    

    6、下载

    $ docker pull <remote-host>:5000/<image>:<tag>
    

    7、列出镜像表

    $ curl http:<remote-host>:5000/v2/<image>/tags/list
    

    (二)Docker Hub公共仓库的使用

    1、注册账号

    https://hub.docker.com

    2、登录Docker Hub

    $ docker login
    
    $ docker login --username=<username> --password=<password>
    

    3、镜像打标签

    $ docker tag <image>:<tag> <username>/<image>:<tag>
    

    4、上传

    $ docker push <username>/<image>:<tag>
    

    5、搜索

    $ docker search <username>
    

    6、下载

    $ docker pull <username>/<image>:<tag>
    

    七、实战

    (一)搭建flask网站

    1、Dockerfile

    # Dockerfile内容
    ...
    
    # build Dockerfile
    
    

    2、创建网络

    $ docker network create <network>
    

    3、需要的容器

    通用命令

    $ docker run -itd \
    --name <container> \
    --net <network> \
    -p <host-port>:<container-port> \
    --mount (type=bind),src=<volume>,dst=<dst> \
    <image>:<tag>
    

    (一)mysql

    1、配置文件

    # 修改copy来的配置文件
    $ sudo vi /root/docker/mysql/mysql.cnf
    
    
    #通常都是字符集与端口的配置
    [client]       
    default-character-set=utf8
    [mysql]   
    default-character-set=utf8
    [mysqld]
    character_set_server=utf8
    # sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    # 配置大小写不敏感
    # lower_case_table_names=1
    

    2、安装mysql容器

    # 命令来源于官网
    $ docker run - some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
    

    根据下面安装方法可以跳过第二个步骤

    # 实际使用
    # <volume-path>=/var/lib/docker/volumes/mysql 
    # <dst>=/var/lib/mysql
    $ docker run -itd \
    --name con-mysql \
    -p 3306:3306 \
    -v vol-mysql:/var/lib/mysql \
    -v /opt/docker/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:5.7
    

    (二)redis

    1、配置文件

    # bind 127.0.0.1
    # protected-mode no
    appendonly yes//持久化
    # requirepass yourpassword
    

    2、安装

    # 官网
    $ docker run --name some-redis -d redis redis-server --appendonly yes
    
    # 实际使用
    $ docker run -itd \
    --name con-redis \
    -p 6379:6379 \
    -v vol-redis:/data \
    -v /opt/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf \
    redis:5.0 \
    redis-server /usr/local/etc/redis/redis.conf
    

    (三)python的flask(OnekkiSite)

    1、Dockerfile

    FROM python:3.7
    
    ADD ./OnekkiSite /var/www/onekki.xyz/OnekkiSite
    
    WORKDIR /var/www/onekki.xyz/OnekkiSite
    
    RUN pip install -r requirements.txt
    
    CMD ["python", "manager.py", "server"]
    

    2、创建容器

    docker run -itd \
    --name con-onekki.xyz \
    -p 5000:5000 \
    -v /opt/docker/onekki.xyz/OnekkiSite:/var/www/onekki.xyz/OnekkiSite \
    onekki.xyz:1.0.0
    

    (四)nginx

    安装

    # 官网
    $ docker run --name some-nginx -d -p 8080:80 some-content-nginx
    
    # 实际使用
    $ docker run -itd \
    --name con-nginx \
    -p 80:80 \
    -v /opt/docker/nginx/html:/usr/share/nginx/html \
    -v /opt/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
    --link con-onekki.xyz \
    nginx:1.16
    
    # /opt/docker/nginx/nginx.conf
    server {
        listen 80; 
        server_name 39.107.230.35;
    
      location / {
        proxy_pass  http://con-onekki.xyz:5000;
      }
      access_log  /var/log/nginx/access.log  main;
    }
    
    # 默认
    # cat /etc/nginx/conf.d/default.conf 
    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    
    

    相关文章

      网友评论

          本文标题:docker的安装和配置

          本文链接:https://www.haomeiwen.com/subject/qdwbectx.html