docker初次使用笔记

Docker容器技术绝对是运营同学的福音,不需要重复在安装系统、业务,构建环境等体力活间消耗宝贵的青春!


1、安装docker;

在线安装:curl -fsSL https://get.docker.com/ | sh


2、配置docker镜像包和容器存储所在的路径,否则到后面突然发现容器空间不够了就麻烦了,修改方法网上有多种,以centos系统为例,建议是直接添加一个daemon.json配置文件进行修改:

[root@abc~]# cat /etc/docker/daemon.json

{

"graph": "/mnt/docker/data",   //路径配置为你系统内中磁盘空间最大的路径 

}

[root@abc~]#

更新:2022-0913,上面的方法如果不好使,可以试试下面的方法:

1、修改docker.service文件,使用-g参数指定存储位置
vi /usr/lib/systemd/system/docker.service  
  ExecStart=/usr/bin/dockerd --graph /新path/docker 


2、reload配置文件 
systemctl daemon-reload 

3、重启docker 
systemctl restart docker.service

4、查看 Docker Root Dir: /var/lib/docker 是否改成设定的目录 /新-path/docker 
docker info


3、搜索你需要的基础镜像包,然后安装:

[root@abc data]# docker search centos

NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED

centos                             The official build of CentOS.                   5911                [OK]        

安装:docker pull centos

安装完成后使用 docker images查看该镜像:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE

kecikeci/centos7.2-tools   latest              7e7d21d26e64        22 months ago       584MB


删除镜像:

[root@izwz9it79rawg1924174lkz ~]# docker images

REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE

zulip/docker-zulip   latest              00da4620a549        6 weeks ago         1.58GB

[root@izwz9it79rawg1924174lkz ~]# docker rmi 00da4620a549


4、创建容器,启动镜像:

> 准备好网络

docker network ls 查看网络,默认只有bridge、host、none三种网桥,创建容器时默认使用bridge

创建自定义IP段和子网掩码的网桥

docker network create --subnet=172.72.0.0/24 mynetwork 

> 运行

docker run -d  --net mynetwork --ip 172.72.0.2  -p 50001:22  -p 443:443 -p 5060:5060  -p 80:80  -p 8081:8081  --name ov500  -ti 7e7d21d26e64

使用 docker ps检查启动状态:

CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                   NAMES

d2d152ebe6fe        7e7d21d26e64        "/usr/sbin/sshd -D"   56 seconds ago      Up 55 seconds       0.0.0.0:50001->22/tcp   ov500

进入该容器后修改root的初始密码:

docker exec -i ov500 /bin/sh or docker exec -it ov500 /bin/bash

passwd root #修改root的,默认密码



5、使用当前ip和50001端口远程连接到你的镜像;


6、重新启停容器;

docker start ov500

docker stop ov500

docker restart ov500

停止所有容器:docker stop $(docker ps -q)


$ docker ps // 查看所有正在运行容器

$ docker stop containerId // containerId 是容器的ID


$ docker ps -a // 查看所有容器

$ docker ps -a -q // 查看所有容器ID


$ docker stop $(docker ps -a -q) //  stop停止所有容器

$ docker  rm $(docker ps -a -q) //   remove删除所有容器


7、删除所有容器;

docker container rm $(docker ps -aq)


8、将容器打包成本地镜像,后续可以作为环境包输出使用;

docker commit -m  "package container to image."   -a  "john"   d2d152ebe6fe john-centos:7.2

解释:docker commit -m  "[镜像描述]"   -a  "[作者]"   [容器ID]  [镜像名称]:[镜像tag] 


9、docker中无法使用 systemd(systemctl) 相关命令的原因是 1号进程不是 init ,而是其他例如 /bin/bash ,所以导致缺少相关文件无法运行。(System has not been booted with systemd as init system (PID 1). Can't operat),以特权模式启动,支持运行systemctl服务:

CentOS的容器:

# docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init

进入容器:

# docker exec -it centos7 /bin/bash

这样可以使用systemctl启动服务了。

 

Ubuntu的容器:

docker run -tid --name test --privileged=true ubuntu:18.04 /sbin/init

docker exec -it test /bin/bash

PS:--privilaged=true一定要加上的。


-- 2020.11.17更新:

将服务器中日志目录、相关存储路径映射为本地目录,否则会出现容器空间占满的情况,具体是在docker run命令后面增加一个-v 命令, -v 本地路径:容器内的目标路径 ,如下: 

docker run -d    -p 50099:22 -p 1935:1935 -p 2935:2935 -p 8091:8091  -p 8090:8090 -p 7443:7443 -p 8554:554 -p 322:322 -p 10000:10000 -p 10000:10000/udp --name mediaserver -v /home/docker/mediaserver/record:/opt/mediaserver/www  --privileged=true mediaserver:v4  /usr/sbin/init


--2021.08.27更新:

配置容器最大使用空间

[root@localhost work]# docker  run  -d    -p 10099:22  --name byd_build -v /home/test/work/:/mnt/work  --privileged=true ubuntu_14.04_build_v2  "/sbin/init" --storage-opt size=100G


bf16960764af9415f57d2aff27842e47cfc095e334c26dcfe90820b457fd9e2b


--2022.03.08更新:

增加UDP端口和UDP端口池映射命令:

docker  run  -d    -p 10100:22 -p  5060:5060 -p  5061:5061 -p 5067:5067 -p  5060:5060/udp -p  5061:5061/udp -p 5067:5067/udp -p  49000-49900:49000-49900/udp --name freeswitch_run_v30 -v /home/lyz/work:/mnt/work  --privileged=true freeswitch_v30:v3 "/usr/sbin/init" --storage-opt size=100G

映射49000-49900/udp的端口


10、修改容器启动命令:

docker container update --privileged=true 容器名字


报错:Docker 启动时报错:iptables:No chain/target/match by the name ;要解决这个问题,只要重启docker服务,之后,正确的iptables规则就会被创建出来


11、给docker容器配置固定IP,需要将宿主机网卡配置为网桥模式,然后给容器配置和宿主机同网段的ip,详细可以baidu参考使用pipework给容器配固定ip;

 pipework br0 ov500_fs1 11.12.117.201/20@11.12.117.68


12、复制镜像和复制容器都是通过保存为新镜像而进行的。

具体为:

保存镜像

docker save ID > xxx.tar

docker load < xxx.tar

保存容器

docker export ID >xxx.tar

docker import xxx.tar containr:v1

然后再docker run -it containr:v1 bash


使用 docker save 命令根据 ID 将镜像保存成一个文件。

1
docker save 0fdf2b4c26d3 > hangge_server.tar


还可以同时将多个 image 打包成一个文件,比如下面将镜像库中的 postgres 和 mongo 打包:

1
docker save -o images.tar postgres:9.6 mongo:3.4


13. docker-composer的安装与使用:

- sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

- pip install docker-compose

理解docker-compose.yml的结构,使用下面的命令启动或停止;

$ sudo docker-compose up -d

$ sudo docker-compose -f ./compose/docker-compose.yml -p myapp up -d

$ sudo docker-compose down

呱牛笔记

-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com


本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com

请先登录后发表评论
  • 最新评论
  • 总共0条评论