[安装]


$ sudo yum install -y yum-utils

//阿里云镜像

$ sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

$ sudo yum makecache fast

$ sudo yum install docker-ce docker-ce-cli containerd.io


[启动]

$ sudo systemctl start docker

$ sudo docker version

$ sudo docker run hello-world

$ sudo docker images  //查看镜像


[卸载]

$ sudo yum remove docker-ce docker-ce-cli containerd.io

$ sudo  rm -rf /var/lib/docker

$ sudo  rm -rf /var/lib/containerd


[搜索镜像]

docker search 镜像名

docker search 镜像名 --filter STARS=3000


[下载镜像]

docker pull 镜像名:tag


[删除镜像]

 docker rmi -f 镜像id 镜像id 镜像id ...

 docker rmi -f $(docker images -aq)


[利用镜像启动一个容器]

docker run [可选参数] images

docker run -it centos /bin/bash 启动并进入容器

docker ps -aq

ctrl +p +q 不停止容器并退出


[删除容器]

docker rm 容器id

docker rm -f 容器id // -f 强制删除。比如该容器正在运行

docker rm -f $(docker ps -aq)


[后台启动]

docker run -d


[停止容器]

docker stop id

docker kill id

docker stop $(docker ps -aq)


[重启容器]

docker restart id


[日志]

 docker logs -f -t --tail 10 facd55b6f260


[容器内进程]

docker top 容器id


[查看容器元数据]

docker inspect facd55b6f260


[进入正在运行的容器]

docker exec -it facd55b6f260 /bin/bash  //开启新终端

docker attach facd55b6f260                  //进入容器正在执行的终端


[从容器内拷贝文件]

docker cp 容器id:容器内路径 目的地

 docker cp facd55b6f260:/root/aaa.txt /root/bbb.txt


[安装nginx]

docker run -d --name nginx01 -p 8000:80 nginx

curl localhost:8000


[安装tomcat]

docker pull tomcat

docker run -it --name tomcat01 -p 8000:8080 tomcat

docker run -it --rm tomcat:9.0  //用完就删除


[查看进程]

docker stats [可选参数:容器id]


[可视化面板 portainer]

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer


[commit]

docker commit -m='提交的描述信息' -a='作者' 容器ID 目标镜像名:[tag]


-------------------------------------------------------------

[挂载卷]

docker run -it  -p 8000:8080 -v /home/tomcat/public_html:/usr/local/tomcat/webapps tomcat:9.0 /bin/bash

docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

docker run -d -P --name nginx02 -v juming-volume:/etc/nginx nginx

-P 随机指定端口

匿名挂载        -v 容器内路径

具名挂载        -v 卷名:容器内路径

指定路径挂载 -v 宿主机路径:容器内路径

docker run -d -P --name nginx02 -v juming-volume:/etc/nginx:ro nginx   //ro readonly 只能从宿主机改变

docker run -d -P --name nginx02 -v juming-volume:/etc/nginx:rw nginx  //rw readwrite


[Dockfile]

//下面的内容写入文件dockerfile1

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "-----end-----"

CMD /bin/bash


//共享挂载

docker build -f dockerfile1 -t lzh-centos .

docker run -it --name docker02 --volumes-from docker01 lzh-centos:1.0


docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

docker run -d -p 3310:3306  -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

容器间配置信息的传递,数据容器的生命周期一直持续到没有容器使用为止。

但是一旦持久化到了本地,本地的数据是不会被删除的


Docker File步骤

1.编写Dockerfile

2.docker build 构建成一个镜像

3.docker run 运行镜像

4.docker push 发布 


[DockerFile 命令]


1. 所有指令必须是大写字母

2.从上到下,顺序执行

3.#号表示注释

4.每一个指定都会创建提交一个镜像层


docker build -f myos -t myos:1.0 .

------------------------------------------

vi myos-test-cmd

FROM centos

CMD ["ls","-a"]


[push]

docker login -u username

docker logout

docker push username/imagename:ver 

docker push lerx/webpam:1.0


docker tag id lerx/imagename:ver

docker tag 74erj83ud8 lerx/myos:1.0


[自定义网络 | 容器互联]

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet


------------------------------------------------


docker run -it -d -p 8801:8080 -v /data/docker/tomcat/lerx/logs:/usr/local/tomcat/logs -v /data/docker/tomcat/lerx/webapps:/usr/local/tomcat/webapps --net mynet --name tomcat-lerx tomcat:9.0.55


--------

docker run --name mysql5736 -v /data/docker/mysql/conf:/etc/mysql/conf.d -v /data/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mypwd --net mynet -p 13306:3306 -d mysql:5.7.36

docker exec -it a42c17f8ce3e /bin/bash


--------------------------


在Docker中没有yum,没有wegt怎么安装软件?
在Docker中安装mysql 数据库后 想要ssh到输入库,但是没有yum命令 没有wegt命令无法安装ssh,可以尝试以下方法:
apt-get update 更新库
apt-get install net-tools
apt-get install vim
apt-get install openssh-server
apt-get install openssl

apt update && apt install -y iproute2 //ip addr

apt-get install iputils-ping     //ping

Missing privilege separation directory: /run/sshd 出现这种情况创建文件夹
/usr/sbin# mkdir /run/sshd
/usr/sbin# /usr/sbin/sshd


【自动重启容器】

docker run -d --restart unless-stopped 容器名字


已经在运行的加入重启参数

docker container update --restart=always 6d38fcaac714

查看最后启动时间

docker inspect -f "{{ .RestartCount }}" 6d38fcaac714

https://blog.csdn.net/xiaokaiv587/article/details/124208337


查询容器的日志在宿主机的位置

docker inspect --format='{{.LogPath}}'  f7ff1da87ec1


查看容器的进程pid

docker inspect -f '{{.State.Pid}}' 5e5a81aa0a29

记录一个进行优化了的运行命令

docker run -it -d --restart unless-stopped -e JAVA_OPTS='-Xmx304m -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true -Dcatalina.connector.useIPVHosts=false -Dcatalina.connector.RECYCLE_FACADES=true -Dcatalina.connector.CACHE_MAX_SIZE=204800' -p 8002:8080 -v /data/docker/tomcat/jyzyy/logs:/usr/local/tomcat/logs -v /data/docker/conf/tomcat/conf:/usr/local/tomcat/conf -v /data/docker/tomcat/jyzyy/webapps:/usr/local/tomcat/webapps -v /etc/localtime:/etc/localtime -e TZ=Asia/Shanghai --net mynet --name cms-jyzyy --add-host=www.tzsjyzyy.com:192.168.0.1 tomcat-lerx:1.0


【故障查询解决】

1.shell登录

2.查询docker容器

docker ps

若无上述界面,则说明docker服务可能未启动。ps -ef|grep docker 查看是否已启动,出现下面的提示或其它错误,则说明docker未启动,则systelctl start docker.service

[root@VM-0-9-centos ~]# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

若有,则查看目录docker容器是否在正常运行。上图中,后面的name是容器别名。

若无,刚 docker start 容器名

可以用 docker ps -aq 列出所有容器,和上图比较一下,上图没有的则是未正常启动或已停止的容器。