docker基础知识

  • Post author:
  • Post category:其他




安装




https://docs.docker.com/get-docker/



配置国内镜像源

  • 官方的镜像源一般比较慢,所以多半都会换成国内的源,如果你有阿里云的话,阿里云会提供一个单独地址的镜像源来使用,需要到自己的阿里云上查看对应地址,在容器镜像服务下的镜像加速器中
  • 换源的步骤:新建/修改

    /etc/docker/daemon.json

    文件,在其中写入内容
	{ "registry-mirrors": ["镜像源地址"] } 
  • 文件保存之后,执行下面的语句进行加载和重启
sudo systemctl daemon-reload 
sudo systemctl restart docker 
  • 常用的镜像源:

    Docker 官方中国区:https://registry.docker-cn.com

    网易:http://hub-mirror.c.163.com

    中国科技大学:https://docker.mirrors.ustc.edu.cn



docker 服务相关命令



启动

systemctl start docker



状态

systemctl status docker



停止

systemctl stop docker 



重启

systemctl restart docker 



开机启动

systemctl enable docker



docker镜像相关命令



查看镜像

# docker images   
docker images -q #查看所有镜像id



搜索镜像

# docker search 镜像名称 
docker search redis



拉取镜像

# docker pull 镜像名称
docker pull redis:5.0



删除镜像

# docker rmi 镜像:版本
docker rmi redis:5.0
docker rmi `docker images -q` #删除所有



查看镜像层数

# docker history 镜像名:版本号
dokcer hoistory app:1.0
docker system df -v #可以用来扫描镜像/容器大小



docker容器相关命令



查看容器

docker ps #查看当前运行中的容器
docker ps -a #查看所有容器
docker ps -l #显示最近创建的容器
docker ps -n #显示最近n个创建的容器
docker ps -q #静默模式,只显示容器编号



进入容器

 docker exec 参数

例:

[root@VM-20-3-centos ~]# docker run -id --name=test3 centos:7 /bin/bash
1d58a102dc07c099a2080b051376e500f198ff47102adac1005d5cad52118d58
[root@VM-20-3-centos ~]# docker exec -it test3 /bin/bash
[root@1d58a102dc07 /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@1d58a102dc07 /]# exit
exit
[root@VM-20-3-centos ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
1d58a102dc07   centos:7   "/bin/bash"   50 seconds ago   Up 50 seconds             test3



创建并启动容器

docker run 参数

例:

docker run -it --name=test centos:7 /bin/bash

  • -i

    保持运行。与-t同时使用,创建容器后进入容器中,推出容器后,容器自动关闭。

  • -t

    为容器分配一个伪输入终端。

  • --name

    为创建的容器命名

  • -d

    以守护(后台)模式运行容器。创建后容器再后台运行,需要使用docker exec进入容器。退出后容器不会关闭。

  • -it

    创建的一般称为交互式容器,-id创建的成为守护式容器。



启动容器

docker start 容器名



停止容器

docker stop 容器id或容器名
docker kill 容器id或容器名  #强制停止容器



删除容器

# docker rm 容器名
docker rm `docker ps -aq` #删除所有
docker rm  `docker ps -aqf status=exited` #删除所有状态为exited的容器



查看容器信息

# docker inspect 容器名
docker inspect redis



复制容器文件到宿主机

docker cp 容器id:容器内路径 宿主机路径



导入和导出容器

docker export 容器id > 导出文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号



import 从tar包中的内容创建一个新的文件系统再导入为镜像

[root@VM-20-3-centos test_dir]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS       PORTS                                                    NAMES
a18026dbc78d   redis:5.0             "docker-entrypoint.s…"   9 months ago    Up 3 weeks   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              c_redis
[root@VM-20-3-centos test_dir]# docker export a18026dbc78d  > redis.tar
[root@VM-20-3-centos test_dir]# cat redis.tar | docker import - zhouerduo/redis:5.0
sha256:59f522c3342b34e385d388a71efa12882d9890cbd61fc8b9519ac57d70fec01a
[root@VM-20-3-centos test_dir]#  docker images
REPOSITORY            TAG               IMAGE ID       CREATED          SIZE
zhouerduo/redis          5.0               59f522c3342b   41 seconds ago   106MB



docker容器的数据卷



配置数据卷

docker run ... -v 宿主机目录(文件):容器内目录(文件)...
docker run -it --name=test4 -v /usr/local/zeshan/docker_test/test4:/usr/local/zeshan centos:7 /bin/bash

注意:

  1. 目录必须是绝对路径
  2. 不存在目录会自动创建
  3. 可以挂在多个数据卷



数据卷容器

  1. 创建启动数据卷容器,使用-v参数
docker run -it --name=test5 -v /test centos:7 /bin/bash'
  1. 创建启动容器test6、test7,使用–volumes-from参数,设置数据卷
docker run -it --name=test6 --volumes-from test5 centos:7 /bin/bash
docker run -it --name=test7 --volumes-from test5 centos:7 /bin/bash
  1. 查看容器信息
docker inspect 容器名

找到”Mounts“,source是实际挂载的目录。test5、test6、test7都一致。destination是自己命名的。test5、test6、test7三个容器中都有这个文件夹。

  ...
        "Mounts": [
            {
                "Type": "volume",
                "Name": "4400eab83bbdb17bc1079d340d2714ce498aca46ab96c0638516b1ff46a8552f",
                "Source": "/var/lib/docker/volumes/4400eab83bbdb17bc1079d340d2714ce498aca46ab96c0638516b1ff46a8552f/_data",
                "Destination": "/test",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
...



Docker应用部署



docker部署mysql



案例需求

docker部署mysql,并通过外部的mysql客户端操作mysqlserver



实现步骤

  1. 搜索mysql镜像
docker search mysql
  1. 拉取mysql镜像
docker pull mysql:5.6
  1. 创建容器,设置端口映射、目录映射

    创建mysql文件夹,用于存放mydsql数据。进入mysql文件夹执行以下操作。
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/ect/mydql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6

参数说明:


-p 3307:3306

将容器的3306端口映射到宿主机的3307端口


-v $PWD/conf:/ect/mydql/conf.d

将宿主机当前目录下的conf/my.cnf 挂载到容器的/etc/mysql/my.cnf


-v $PWD/logs:/logs

将宿主机当前的logs目录挂载到容器的/logs


-v $PWD/data:/var/lib/mysql

将宿主机的data目录挂载到容器的 /var/lib/mysql


-e MYSQL_ROOT_PASSWORD=123456

初始化root用户的密码

  1. 操作容器中的mysql
docker exec -it c_mysql /bin/bash



docker部署tomcat



实现步骤

  1. 搜索tomcat镜像
docker search tomcat
  1. 拉取tomcat镜像
docker pull tomcat
  1. 创建容器,设置端口映射、目录映射
docker run -id \
-p 8088:8080 \
--name=c_tomcat \
-v /usr/local/zeshan/docker_tomcat:/usr/local/tomcat/webapps \
tomcat
  1. 创建文件,并用外部机器访问tomcat



docker部署nginx



案例需求

docker部署nginx,并通过外部机器访问nginx



实现步骤

  1. 搜索nginx镜像
docker search nginx
  1. 拉取nginx镜像
docker pull nginx
  1. 创建容器

    创建/usr/local/zeshan/docker_nginx/conf/nginx.conf文件,拷贝nginx默认的conf就行。

    执行以下
docker run -id \
-p 80:80 \
--name=c_nginx \
-v /usr/local/zeshan/docker_nginx/conf/nginx.conf:/ect/nginx/nginx.conf \
-v /usr/local/zeshan/docker_nginx/logs:/var/log/nginx \
-v /usr/local/zeshan/docker_nginx/html:/usr/share/nginx/html \
nginx

进入/usr/local/zeshan/docker_nginx/html,

创建index.html

内容如下

<h1> hello nginx docker</h1>
  1. 使用外部机器访问nginx



docker部署redis



实现步骤

  1. 搜索redis镜像
docker search redis
  1. 拉取redis镜像
docker pull redis:5.0
  1. 创建容器
docker run -id \
-p 6379:6379 \
--name=c_redis \
redis:5.0
  1. 使用外部机器访问redis
redis-cli -h 服务器ip -p 6379



docker-compose



安装docker-compose

参考


https://www.runoob.com/docker/docker-compose.html



https://dockerdocs.cn/compose/install/

Linux系统

https://github.com/docker/compose/releases
curl "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

更改权限,加上执行权限

chmod +x /usr/local/bin/docker-compose



查看版本

docker-compose version



查看配置

docker-compose config 



后台启动

docker-compose up -d 



构建镜像

docker-compose build



下载镜像

docker-compose pull xxx



查看运行

docker-compose ps 



查看进程

docker-composed top 



启动

docker-compose start 



停止

docker-compose stop



docker commit

docker commit 容器名 新镜像名:tag

一般用作从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dockerfile来完成。默认使用commit镜像,对外不可解释,可维护性差。



dockerfile


https://docs.docker.com/engine/reference/builder/



docker 镜像原理

  • docker镜像是有特殊的文件系统叠加而成
  • 最底层是bootfs,并使用宿主机的bootfs
  • 第二层是root文件的rootfs,成为baseimge
  • 然后往上叠加其他的镜像文件



dockder build


.dockerignore

忽略文件


docker build -f

制定文件


docker build -t

添加标签


docker build --no-cache

不使用缓存


docker build --build-arg

构建时变量


arg--

指令变量



Dockerfile自定义centos



案例需求

自定义centos7镜像。

要求

  1. 默认登录路径为/usr;
  2. 可以使用vim



实现步骤:

  1. 定义父镜像:

    FROM centos:7
  2. 定义作者信息:

    MAINTAINER zhouerduo<zhouerduo@test.com>
  3. 执行安装vim命令:

    RUN yum install -y vim
  4. 定义默认的工作路径:

    WORKDIR /usr
  5. 定义容器启动执行的命令:

    CMD /bin/bash

dockerfile文件完整内容

FROM centos:7
MAINTAINER zhouerduo<zhouerduo@test.com>
RUN yum install -y vim
WORKDIR /usr/local/zhouerduo
CMD /bin/bash

执行

docker build -f dockerfile文件路径 -t 镜像名:镜像版本  寻址路径

例如

docker build -f ./centos_dockerfile -t my_centos:1 .



制作镜像



方式一(不推荐):docker commit 容器名称 镜像名称

不会保存制作过程

[root@VM-20-3-centos ~]# docker commit mysql tmp
sha256:c81973709d25607a403d941d5777736d199989995b118d32caa3362d49f2b739

[root@VM-20-3-centos ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
tmp           latest    c81973709d25   2 minutes ago   519MB



方式二(推荐):dockerfile



Dokerfile部署centos



容器和虚拟机的比较



相同

相似的资源隔离和分配优势



不同

  • 容器

    1. 容器虚拟化的是操作系统。

    2. 容器和宿主机共享内核,只能运行同一类型的操作系统。

  • 虚拟机

    1. 虚拟机虚拟化的是硬件。

    2. 虚拟机可以运行不同的操作系统。



版权声明:本文为z_erduo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。