docker install
Install Docker Engine on CentOS
注意系统环境:
To install Docker Engine, you need a maintained version of CentOS 7. Archived versions aren’t supported or tested.
docker images
command
docker images
-a, --all Show all images (default hides intermediate images)
-q, Only show numeric IDs
docker search mysql
docker pull mysql:latest (联合文件系统, 公用的可通用,不用再重新下载)
# docker rm0 -f 3d65b4f0723b 2ae23eb477aa
# docker rmi -f $(docker images -aq)
nginx
mkdir -p /data/docker/nginx/{conf,logs,html}
docker exec -it `docker ps -a | grep jx_nginx | awk '{print $1}'` /usr/sbin/nginx -s reload
docker run --name bee-nginx -d -p 8080:80 nginx
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro nginx
# 自定义挂载配置
docker run --name some-nginx -v /data/docker/nginx/html/:/usr/share/nginx/html:ro -v /data/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -d -p 8080:80 nginx
# https
docker run --name jx_nginx -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/html/:/usr/share/nginx/html -v $PWD/certs/:/etc/nginx/cert/ -p 8080:80 -p 443:443 -d nginx
https://wx.3bule.com
mysql
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker run --name jx_mysql -e MYSQL_ROOT_PASSWORD=Li763a7689 -d -i -p 3306:33060 mysql
docker exec -it `docker ps -a | grep some-mysql | awk '{print $1}'` bash
docker ps -a | grep mysql
docker exec -it some-mysql bash
docker run -d -p 3306:3306 -v /data/soft/mysql:/etc/mysql/conf.d -v /data/soft/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Li763a7689 -d --name jx_mysql mysql
查看容器中的mysql配置:The default configuration for MySQL can be found in /etc/mysql/my.cnf
cat /etc/mysql/my.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
docker run -p 3307:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
# -p 将本地主机的端口映射到docker容器端口
# --name 容器名称命名
# -e 配置信息 配置root密码
# -d 镜像名称
docker container
docker run [images] 启动镜像
--name 容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 主机端口映射到容器端口 80:8080
docker ps
docker pa -a
# 删除指定容器
docker rm 容器id
# 删除正在运行的容器
docker rm -f 容器id
# 删除所有容器
docker rm -f $(docker ps -aq)
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id
容器使用后台运行,就必须要有一个前台进程
# 显示指定行数的日志
docker logs -tf --tail 10 容器
进入容器
docker exec -it 容器id bash
# 打开新的终端
docker attch -it 容器id bash
docker exec # 进入容器后开启一个新的终端
docker attach # 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝到主机
docker cp 容器id:/home/test.txt
Docker 镜像加载
UnionFS(联合文件系统): Union文件系统
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
容器数据卷
容器之间数据共享技术,Docker容器中产生的数据,同步到本地
将容器内的目录挂载到本地
docker run -it -v 主机目录,容器目录
docker inspect 容器id
具名挂载: docker run -d -p —name nginx_01 -v /etc/nginx nginx
Dockerfile
使用gin, 新建一个简单的golang web项目
构建
docker build .
-f 指定文件 -t 指定镜像名 name:tag
docker build . -t bee:lastest
docker build -f Dockerfile -t jx_centos:01 .
CMD 和 ENTRYPOINT 区别
CMD: 只有最后一个生效
FROM centos
CMD [“ls”, “a”] 想追加一个命令 docker run 容器id -l
因为CMD是替换,所以会报错
ENTRYPOINT:
FROM centos
ENTRYPOINT [“ls”, “a] 这个是追加命令,是直接追加到ENTRYPOINT之后的
docker compose
Overview of Docker Compose
Dockerfile 让程序运行在任何地方, web服务。 redis mysql nginx …多个容器 一组容器
service: 一个应用的容器, 可以包含若干运行相同镜像的容器实例
project: 一组关联的应用容器
version: '2.0'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
docker compose install
curl -L https://get.daocloud.io/docker/compose/releases/download/1.26.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
docker-compose up
练习
第一个简单项目: 我的golang
FROM golang:alpine as builder
ENV GOPROXY https://goproxy.io,https://goproxy.cn,direct
ENV GO111MODULE on
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
WORKDIR /app
ADD go.mod .
ADD go.sum .
RUN go mod download
COPY . /app
RUN go build .
EXPOSE 8888:8888
ENTRYPOINT ["./lunch"]
docker build . -t bee:lastest
docker run --name jx_bee -d -p 80:8080 bee:lastest
gin代码写的是8080端口, Dockerfile 8888:8888端口 ,启动的容器是
5a2e37d3f7ab bee:lastest “./app” 0.0.0.0:8888->8888/tcp jx_bee
所以就没访问到,要保证可以访问到容器内,该代码启动的端口
linux command
cd /data/soft/web/bee-admin/ServiceSide/bee/
cat docker-compose.yaml
curl "http://127.0.0.1/hb/user/getUserList"
docker-compose --compatibility ps
docker-compose --compatibility up
docker-compose --compatibility up -d
docker-compose --compatibility stop
docker ps -a
mkdir -p /data/docker/mysql/etc && cd /data/docker/mysql
cat >> /data/docker/mysql/etc/my.cnf <<-EOF
# 从容器中拷贝文件
docker cp 容器id:/etc/nginx/conf.d /root/echo_1/conf.d
问题
1.启动容器失败的,可以查看下日志:
docker logs -f -t —tail 400 jx_nginx
docker logs 容器id
2.nginx https: 配置时
报错: cannot load certificate “/etc/nginx/certs/wx.3bule.com.pem”
挂载的数据卷: $PWD/certs/:/etc/nginx/cert/
nginx配置
ssl_certificate /etc/nginx/certs/wx.3bule.com.pem;
ssl_certificate_key /etc/nginx/certs/wx.3bule.com.key;
所以把nginx配置certs -> cert
3.容器启动失败
docker insepct 容器id
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 1,
"Error": "",
"StartedAt": "2020-11-26T01:34:51.131612125Z",
"FinishedAt": "2020-11-26T01:34:51.334779125Z"
},