美文网首页
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